diff --git a/config/global.go b/config/global.go index 4bcfe7d..df62328 100644 --- a/config/global.go +++ b/config/global.go @@ -1,3 +1,3 @@ package config -const ShowDebugLog = false +const ShowDebugLog = true diff --git a/gold/head/hello.go b/gold/head/hello.go new file mode 100644 index 0000000..bd5ccee --- /dev/null +++ b/gold/head/hello.go @@ -0,0 +1,8 @@ +package head + +type Hello uint8 + +const ( + HelloPing Hello = iota + HelloPong +) diff --git a/gold/link/listen.go b/gold/link/listen.go index 1290cbb..ea40365 100644 --- a/gold/link/listen.go +++ b/gold/link/listen.go @@ -226,13 +226,18 @@ func (m *Me) dispatch(packet *head.Packet, addr p2p.EndPoint, index int, finish } switch packet.Proto { case head.ProtoHello: - n, err := p.WriteAndPut(head.NewPacket(head.ProtoHello, m.SrcPort(), p.peerip, m.DstPort(), nil), false) - if err == nil { - if config.ShowDebugLog { - logrus.Debugln("[listen] @", index, "send", n, "bytes hello ack packet") + switch { + case len(packet.Body()) == 0: + logrus.Warnln("[listen] @", index, "recv old hello packet, do nothing") + case packet.Body()[0] == byte(head.HelloPing): + n, err := p.WriteAndPut(head.NewPacket(head.ProtoHello, m.SrcPort(), p.peerip, m.DstPort(), []byte{byte(head.HelloPong)}), false) + if err == nil { + logrus.Infoln("[listen] @", index, "recv hello, send", n, "bytes hello ack packet") + } else { + logrus.Errorln("[listen] @", index, "send hello ack packet error:", err) } - } else { - logrus.Errorln("[listen] @", index, "send hello ack packet error:", err) + default: + logrus.Infoln("[listen] @", index, "recv hello ack packet, do nothing") } packet.Put() case head.ProtoNotify: diff --git a/gold/link/nat.go b/gold/link/nat.go index c661b24..85901b0 100644 --- a/gold/link/nat.go +++ b/gold/link/nat.go @@ -35,7 +35,7 @@ func (l *Link) keepAlive(dur int64) { logrus.Infoln("[nat] re-connect me succeeded") } } - n, err := l.WriteAndPut(head.NewPacket(head.ProtoHello, l.me.srcport, l.peerip, l.me.dstport, nil), false) + n, err := l.WriteAndPut(head.NewPacket(head.ProtoHello, l.me.srcport, l.peerip, l.me.dstport, []byte{byte(head.HelloPing)}), false) if err == nil { logrus.Infoln("[nat] send", n, "bytes keep alive packet") } else {