1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-11 20:20:27 +08:00

add istransfer option in link.Write

This commit is contained in:
fumiama
2021-12-30 16:03:08 +08:00
parent 6627881c63
commit c3d05635f0
7 changed files with 17 additions and 10 deletions

View File

@@ -86,7 +86,9 @@ func (p *Packet) Marshal(src net.IP) []byte {
} }
p.DataSZ = uint32(len(p.Data)) p.DataSZ = uint32(len(p.Data))
p.Src = src if src != nil {
p.Src = src
}
packet := make([]byte, 52+len(p.Data)) packet := make([]byte, 52+len(p.Data))
binary.LittleEndian.PutUint32(packet[:4], p.DataSZ) binary.LittleEndian.PutUint32(packet[:4], p.DataSZ)

View File

@@ -72,10 +72,15 @@ func (l *Link) Read() *head.Packet {
} }
// Write 向 peer 发包 // Write 向 peer 发包
func (l *Link) Write(p *head.Packet) (n int, err error) { func (l *Link) Write(p *head.Packet, istransfer bool) (n int, err error) {
p.FillHash() p.FillHash()
p.Data = l.Encode(p.Data) p.Data = l.Encode(p.Data)
d := p.Marshal(l.me.me) var d []byte
if istransfer {
d = p.Marshal(nil)
} else {
d = p.Marshal(l.me.me)
}
if d == nil { if d == nil {
return 0, errors.New("[link] ttl exceeded") return 0, errors.New("[link] ttl exceeded")
} }

View File

@@ -46,7 +46,7 @@ func (m *Me) listen() (conn *net.UDPConn, err error) {
case head.ProtoHello: case head.ProtoHello:
switch p.status { switch p.status {
case LINK_STATUS_DOWN: case LINK_STATUS_DOWN:
_, _ = p.Write(head.NewPacket(head.ProtoHello, 0, p.peerip, 0, nil)) _, _ = p.Write(head.NewPacket(head.ProtoHello, 0, p.peerip, 0, nil), false)
logrus.Infoln("[link] send hello ack packet") logrus.Infoln("[link] send hello ack packet")
p.status = LINK_STATUS_HALFUP p.status = LINK_STATUS_HALFUP
case LINK_STATUS_HALFUP: case LINK_STATUS_HALFUP:
@@ -77,7 +77,7 @@ func (m *Me) listen() (conn *net.UDPConn, err error) {
} else if p.Accept(packet.Dst) { } else if p.Accept(packet.Dst) {
if p.allowtrans { if p.allowtrans {
// 转发 // 转发
p.Write(&packet) p.Write(&packet, true)
logrus.Infoln("[link] trans packet to", packet.Dst.String()+":"+strconv.Itoa(int(packet.DstPort))) logrus.Infoln("[link] trans packet to", packet.Dst.String()+":"+strconv.Itoa(int(packet.DstPort)))
} else { } else {
logrus.Warnln("[link] refused to trans packet to", packet.Dst.String()+":"+strconv.Itoa(int(packet.DstPort))) logrus.Warnln("[link] refused to trans packet to", packet.Dst.String()+":"+strconv.Itoa(int(packet.DstPort)))

View File

@@ -15,7 +15,7 @@ func (l *Link) keepAlive() {
go func() { go func() {
t := time.NewTicker(time.Second * time.Duration(l.keepalive)) t := time.NewTicker(time.Second * time.Duration(l.keepalive))
for range t.C { for range t.C {
_, _ = l.Write(head.NewPacket(head.ProtoHello, 0, l.peerip, 0, nil)) _, _ = l.Write(head.NewPacket(head.ProtoHello, 0, l.peerip, 0, nil), false)
logrus.Infoln("[link.nat] send keep alive packet") logrus.Infoln("[link.nat] send keep alive packet")
} }
}() }()

View File

@@ -27,6 +27,6 @@ func (l *Link) SendQuery(peers ...string) error {
if err != nil { if err != nil {
return err return err
} }
_, err = l.Write(head.NewPacket(head.ProtoQuery, 0, l.peerip, 0, data)) _, err = l.Write(head.NewPacket(head.ProtoQuery, 0, l.peerip, 0, data), false)
return err return err
} }

View File

@@ -79,7 +79,7 @@ func (nc *NIC) Start(m *link.Me) {
logrus.Warnln("[lower] connect to peer", dst.String(), "err:", err) logrus.Warnln("[lower] connect to peer", dst.String(), "err:", err)
continue continue
} }
lnk.Write(head.NewPacket(head.ProtoData, srcport, dst, dstport, packet)) lnk.Write(head.NewPacket(head.ProtoData, srcport, dst, dstport, packet), false)
} }
} }

View File

@@ -79,7 +79,7 @@ func (s *Tunnel) handleWrite() {
logrus.Debugln("[tunnel] writing", len(b), "bytes...") logrus.Debugln("[tunnel] writing", len(b), "bytes...")
for len(b) > int(s.mtu) { for len(b) > int(s.mtu) {
logrus.Infoln("[tunnel] split buffer") logrus.Infoln("[tunnel] split buffer")
_, err := s.l.Write(head.NewPacket(head.ProtoData, s.src, s.peerip, s.dest, b[:s.mtu])) _, err := s.l.Write(head.NewPacket(head.ProtoData, s.src, s.peerip, s.dest, b[:s.mtu]), false)
if err != nil { if err != nil {
logrus.Errorln("[tunnel] write err:", err) logrus.Errorln("[tunnel] write err:", err)
return return
@@ -87,7 +87,7 @@ func (s *Tunnel) handleWrite() {
logrus.Debugln("[tunnel] write succeeded") logrus.Debugln("[tunnel] write succeeded")
b = b[s.mtu:] b = b[s.mtu:]
} }
_, err := s.l.Write(head.NewPacket(head.ProtoData, s.src, s.peerip, s.dest, b)) _, err := s.l.Write(head.NewPacket(head.ProtoData, s.src, s.peerip, s.dest, b), false)
if err != nil { if err != nil {
logrus.Errorln("[tunnel] write err:", err) logrus.Errorln("[tunnel] write err:", err)
break break