bugfix
This commit is contained in:
parent
48c1dfc8c5
commit
3e86d1f37d
@ -2,6 +2,7 @@ package proxy
|
||||
|
||||
import (
|
||||
"net"
|
||||
"time"
|
||||
"zproxy/zlog"
|
||||
)
|
||||
|
||||
@ -37,7 +38,7 @@ func (client *UClientProxy) NewTcpConnection(id uint32) *PacketConnect {
|
||||
zlog.Infof("Forward %s => %s", remote.LocalAddr(), remote.Name())
|
||||
go func() {
|
||||
local.Forward(remote, 0)
|
||||
//remote.SetReadDeadline(time.Now())
|
||||
remote.SetReadDeadline(time.Now())
|
||||
}()
|
||||
go remote.Forward(local, 0)
|
||||
return nil
|
||||
|
||||
@ -2,12 +2,13 @@ package proxy
|
||||
|
||||
import (
|
||||
"net"
|
||||
"time"
|
||||
"zproxy/zlog"
|
||||
)
|
||||
|
||||
type UServerProxy struct {
|
||||
RemoteMap map[uint32]*PacketConnect
|
||||
ClientMap map[uint32]*PacketConnect
|
||||
LocalMap map[uint32]*PacketConnect
|
||||
RemoteConn *PacketConnect
|
||||
MessageQueue chan uint32
|
||||
}
|
||||
@ -15,29 +16,29 @@ type UServerProxy struct {
|
||||
func NewServerProxy() *UServerProxy {
|
||||
return &UServerProxy{
|
||||
RemoteMap: make(map[uint32]*PacketConnect),
|
||||
ClientMap: make(map[uint32]*PacketConnect),
|
||||
LocalMap: make(map[uint32]*PacketConnect),
|
||||
MessageQueue: make(chan uint32, 32),
|
||||
}
|
||||
}
|
||||
func (server *UServerProxy) NewTcpConnection(client *PacketConnect) {
|
||||
data := client.ReadHeader()
|
||||
func (server *UServerProxy) NewTcpConnection(remote *PacketConnect) {
|
||||
data := remote.ReadHeader()
|
||||
if string(data[:4]) == "anki" {
|
||||
id := packetEndian.Uint32(data[4:8])
|
||||
client.SetName("remote", id)
|
||||
remote.SetName("remote", id)
|
||||
if id == RemoteID {
|
||||
if server.RemoteConn != nil && server.RemoteConn != client {
|
||||
if server.RemoteConn != nil && server.RemoteConn != remote {
|
||||
_ = server.RemoteConn.Close()
|
||||
}
|
||||
zlog.Infof("rcv remote %s => %s", client.Name(), client.LocalAddr())
|
||||
server.RemoteConn = client
|
||||
zlog.Infof("rcv remote %s => %s", remote.Name(), remote.LocalAddr())
|
||||
server.RemoteConn = remote
|
||||
} else {
|
||||
server.RemoteMap[id] = client
|
||||
server.RemoteMap[id] = remote
|
||||
server.MessageQueue <- id
|
||||
}
|
||||
return
|
||||
}
|
||||
if server.RemoteConn == nil {
|
||||
_ = client.Close()
|
||||
_ = remote.Close()
|
||||
return
|
||||
}
|
||||
id := IncID()
|
||||
@ -48,25 +49,26 @@ func (server *UServerProxy) NewTcpConnection(client *PacketConnect) {
|
||||
server.RemoteConn = nil
|
||||
return
|
||||
}
|
||||
server.ClientMap[id] = client
|
||||
client.SetName("local", id)
|
||||
zlog.Infof("%d %d %s %s", len(server.RemoteMap), len(server.ClientMap), data, client.Name())
|
||||
server.LocalMap[id] = remote
|
||||
remote.SetName("remote", id)
|
||||
zlog.Infof("%d %d %s %s", len(server.RemoteMap), len(server.LocalMap), data, remote.Name())
|
||||
}
|
||||
func (server *UServerProxy) MessageLoop() {
|
||||
for {
|
||||
select {
|
||||
case mid := <-server.MessageQueue:
|
||||
remote := server.RemoteMap[mid]
|
||||
client := server.ClientMap[mid]
|
||||
if client == nil || remote == nil {
|
||||
local := server.LocalMap[mid]
|
||||
if local == nil || remote == nil {
|
||||
continue
|
||||
}
|
||||
go func() {
|
||||
client.Forward(remote, HeaderSize)
|
||||
delete(server.ClientMap, mid)
|
||||
local.Forward(remote, HeaderSize)
|
||||
delete(server.LocalMap, mid)
|
||||
}()
|
||||
go func() {
|
||||
remote.Forward(client, 0)
|
||||
remote.Forward(local, 0)
|
||||
local.SetReadDeadline(time.Now())
|
||||
delete(server.RemoteMap, mid)
|
||||
}()
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user