mirror of
https://github.com/fumiama/WireGold.git
synced 2026-06-29 23:30:37 +08:00
模块化 me router
This commit is contained in:
@@ -2,12 +2,14 @@ package link
|
||||
|
||||
import (
|
||||
"net"
|
||||
"sync"
|
||||
"unsafe"
|
||||
|
||||
tea "github.com/fumiama/gofastTEA"
|
||||
)
|
||||
|
||||
var (
|
||||
// Me 是本机的抽象
|
||||
type Me struct {
|
||||
// 本机私钥
|
||||
// 利用 Curve25519 生成
|
||||
// https://pkg.go.dev/golang.org/x/crypto/curve25519
|
||||
@@ -17,21 +19,34 @@ var (
|
||||
me net.IP
|
||||
// 本机 endpoint
|
||||
myend *net.UDPAddr
|
||||
)
|
||||
// 本机活跃的所有连接
|
||||
connections map[string]*Link
|
||||
// 读写同步锁
|
||||
connmapmu sync.RWMutex
|
||||
// 本机监听的 endpoint
|
||||
myconn *net.UDPConn
|
||||
// 本机路由表
|
||||
router *Router
|
||||
}
|
||||
|
||||
// SetMyself 设置本机参数
|
||||
func SetMyself(privateKey [32]byte, myIP string, myEndpoint string) {
|
||||
privKey = privateKey
|
||||
// NewMe 设置本机参数
|
||||
func NewMe(privateKey *[32]byte, myIP string, myEndpoint string) (m Me) {
|
||||
m.privKey = *privateKey
|
||||
var err error
|
||||
myend, err = net.ResolveUDPAddr("udp", myEndpoint)
|
||||
m.myend, err = net.ResolveUDPAddr("udp", myEndpoint)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
me = net.ParseIP(myIP)
|
||||
myconn, err = listen()
|
||||
m.me = net.ParseIP(myIP)
|
||||
m.myconn, err = m.listen()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
m.connections = make(map[string]*Link)
|
||||
m.router = &Router{
|
||||
routetable: make(map[string][]*Link),
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Encode 使用 TEA 加密
|
||||
@@ -44,7 +59,7 @@ func (l *Link) Encode(b []byte) (eb []byte, err error) {
|
||||
} else {
|
||||
// 在此处填写加密逻辑,密钥是l.key,输入是b,输出是eb
|
||||
// 不用写return,直接赋值给eb即可
|
||||
eb = (*tea.TEA)(unsafe.Pointer(&privKey)).Encrypt(b)
|
||||
eb = (*tea.TEA)(unsafe.Pointer(l.key)).Encrypt(b)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -59,7 +74,7 @@ func (l *Link) Decode(b []byte) (db []byte, err error) {
|
||||
} else {
|
||||
// 在此处填写解密逻辑,密钥是l.key,输入是b,输出是db
|
||||
// 不用写return,直接赋值给db即可
|
||||
db = (*tea.TEA)(unsafe.Pointer(&privKey)).Decrypt(b)
|
||||
db = (*tea.TEA)(unsafe.Pointer(l.key)).Decrypt(b)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user