mirror of
https://github.com/fumiama/WireGold.git
synced 2025-09-26 19:21:11 +08:00
fix(nat): panic on nil endpoint
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"io"
|
||||
"net"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"sync"
|
||||
@@ -173,7 +174,7 @@ func (m *Me) dispatch(packet *head.Packet, addr p2p.EndPoint, index int, finish
|
||||
packet.Put()
|
||||
return
|
||||
}
|
||||
if p.endpoint == nil || !p.endpoint.Euqal(addr) {
|
||||
if reflect.ValueOf(p.endpoint).IsZero() || !p.endpoint.Euqal(addr) {
|
||||
if m.ep.Network() == "tcp" && !addr.Euqal(p.endpoint) {
|
||||
logrus.Infoln("[listen] @", index, "set endpoint of peer", p.peerip, "to", addr.String())
|
||||
p.endpoint = addr
|
||||
|
@@ -2,6 +2,7 @@ package link
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
"unsafe"
|
||||
@@ -69,7 +70,7 @@ func (l *Link) onNotify(packet []byte) {
|
||||
if err == nil {
|
||||
p, ok := l.me.IsInPeer(peer)
|
||||
if ok {
|
||||
if !p.endpoint.Euqal(addr) {
|
||||
if reflect.ValueOf(p.endpoint).IsZero() || !p.endpoint.Euqal(addr) {
|
||||
p.endpoint = addr
|
||||
logrus.Infoln("[nat] notify set ep of peer", peer, "to", ep)
|
||||
}
|
||||
@@ -109,7 +110,7 @@ func (l *Link) onQuery(packet []byte) {
|
||||
lnk, ok := l.me.IsInPeer(p)
|
||||
eps := ""
|
||||
if l.me.ep.Network() == "udp" { // udp has real p2p
|
||||
if lnk.endpoint == nil {
|
||||
if reflect.ValueOf(lnk.endpoint).IsZero() {
|
||||
continue
|
||||
}
|
||||
eps = lnk.endpoint.String()
|
||||
@@ -120,7 +121,7 @@ func (l *Link) onQuery(packet []byte) {
|
||||
if eps == "" {
|
||||
continue
|
||||
}
|
||||
if ok && lnk.endpoint != nil {
|
||||
if ok && !reflect.ValueOf(lnk.endpoint).IsZero() {
|
||||
notify[p] = [2]string{
|
||||
lnk.endpoint.Network(),
|
||||
eps,
|
||||
|
@@ -9,6 +9,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"reflect"
|
||||
|
||||
"github.com/klauspost/compress/zstd"
|
||||
"github.com/sirupsen/logrus"
|
||||
@@ -123,7 +124,7 @@ func (l *Link) write(p *head.Packet, teatype uint8, additional uint16, datasz ui
|
||||
// write 向 peer 发一个包
|
||||
func (l *Link) writeonce(p *head.Packet, teatype uint8, additional uint16, datasz uint32, offset uint16, istransfer, hasmore bool, seq uint32) (int, error) {
|
||||
peerep := l.endpoint
|
||||
if peerep == nil {
|
||||
if reflect.ValueOf(peerep).IsZero() {
|
||||
return 0, errors.New("nil endpoint of " + p.Dst.String())
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user