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