1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-29 23:30:37 +08:00

模块化 me router

This commit is contained in:
fumiama
2021-12-28 12:44:28 +08:00
parent bba9662a5b
commit ff5d9a03c5
7 changed files with 87 additions and 62 deletions

View File

@@ -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
}