Commit 0e870c80 authored by Tsaiilin's avatar Tsaiilin

update

parent d134309b
...@@ -35,9 +35,10 @@ func NewCli(cfg *model.Configure) *Client { ...@@ -35,9 +35,10 @@ func NewCli(cfg *model.Configure) *Client {
} }
} }
client := &Client{ client := &Client{
config: cfg, config: cfg,
localAddr: localAddr, localAddr: localAddr,
connStore: sync.Map{}, connStore: sync.Map{},
sessionStore: sync.Map{},
} }
return client return client
......
...@@ -62,6 +62,15 @@ func (client *Client) handleConnect(packet *protocol.MajoraPacket, session getty ...@@ -62,6 +62,15 @@ func (client *Client) handleConnect(packet *protocol.MajoraPacket, session getty
dialer := net.Dialer{ dialer := net.Dialer{
Timeout: common.UpstreamTimeout, Timeout: common.UpstreamTimeout,
LocalAddr: client.localAddr, LocalAddr: client.localAddr,
//Resolver: &net.Resolver{
// PreferGo: true,
// Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
// d := net.Dialer{
// Timeout: 10 * time.Second,
// }
// return d.DialContext(ctx, "udp", "8.8.8.8:53")
// },
//},
} }
conn, err := dialer.Dial(common.TCP, packet.Extra) conn, err := dialer.Dial(common.TCP, packet.Extra)
...@@ -177,7 +186,7 @@ func (client *Client) handleUpStream(conn *net.TCPConn, packet *protocol.MajoraP ...@@ -177,7 +186,7 @@ func (client *Client) handleUpStream(conn *net.TCPConn, packet *protocol.MajoraP
traceRecorder.RecordEvent(trace.UpStreamEvent, fmt.Sprintf("Ready read from upstream (sn:%d)", packet.SerialNumber)) traceRecorder.RecordEvent(trace.UpStreamEvent, fmt.Sprintf("Ready read from upstream (sn:%d)", packet.SerialNumber))
log.Run().Debugf("[handleUpStream] %d-> handleUpStream start...", packet.SerialNumber) log.Run().Debugf("[handleUpStream] %d-> handleUpStream start...", packet.SerialNumber)
for { for {
buf := make([]byte, common.BufSize) // 4k buf := make([]byte, common.BufSize)
cnt, err := conn.Read(buf) cnt, err := conn.Read(buf)
if err != nil { if err != nil {
opErr, ok := err.(*net.OpError) opErr, ok := err.(*net.OpError)
...@@ -197,9 +206,9 @@ func (client *Client) handleUpStream(conn *net.TCPConn, packet *protocol.MajoraP ...@@ -197,9 +206,9 @@ func (client *Client) handleUpStream(conn *net.TCPConn, packet *protocol.MajoraP
traceRecorder.RecordEvent(trace.UpStreamEvent, fmt.Sprintf("read count: %d (sn:%d)", traceRecorder.RecordEvent(trace.UpStreamEvent, fmt.Sprintf("read count: %d (sn:%d)",
cnt, packet.SerialNumber)) cnt, packet.SerialNumber))
traceRecorder.RecordEvent(trace.UpStreamEvent, fmt.Sprintf("Start transfer data to natServer (sn:%d)", packet.SerialNumber)) traceRecorder.RecordEvent(trace.UpStreamEvent, fmt.Sprintf("Start write to natServer (sn:%d)", packet.SerialNumber))
pack := protocol.TypeTransfer.CreatePacket() pack := protocol.TypeTransfer.CreatePacket()
pack.Data = buf[:cnt] pack.Data = buf[0:cnt]
pack.SerialNumber = packet.SerialNumber pack.SerialNumber = packet.SerialNumber
if _, _, err := session.WritePkg(pack, 0); err != nil { if _, _, err := session.WritePkg(pack, 0); err != nil {
log.Error().Errorf("[handleUpStream] %d-> write to server fail %+v", packet.SerialNumber, err.Error()) log.Error().Errorf("[handleUpStream] %d-> write to server fail %+v", packet.SerialNumber, err.Error())
...@@ -222,7 +231,7 @@ func (client *Client) handleDisconnectMessage(session getty.Session, packet *pro ...@@ -222,7 +231,7 @@ func (client *Client) handleDisconnectMessage(session getty.Session, packet *pro
log.Run().Debugf("[handleDisconnectMessage] %d->session closed %v extra:%s", packet.SerialNumber, session.IsClosed()) log.Run().Debugf("[handleDisconnectMessage] %d->session closed %v extra:%s", packet.SerialNumber, session.IsClosed())
if conn, ok := client.connStore.Load(packet.SerialNumber); ok { if conn, ok := client.connStore.Load(packet.SerialNumber); ok {
upstreamConn := conn.(*net.TCPConn) upstreamConn := conn.(*net.TCPConn)
readDeadLine := time.Now().Add(3 * time.Second) readDeadLine := time.Now().Add(10 * time.Millisecond)
traceRecorder.RecordEvent(trace.DisconnectEvent, fmt.Sprintf("Set upstream read deadline:%s (sn:%d)", traceRecorder.RecordEvent(trace.DisconnectEvent, fmt.Sprintf("Set upstream read deadline:%s (sn:%d)",
readDeadLine.Format("2006-01-02 15:04:05.000000"), packet.SerialNumber)) readDeadLine.Format("2006-01-02 15:04:05.000000"), packet.SerialNumber))
err := upstreamConn.SetReadDeadline(readDeadLine) err := upstreamConn.SetReadDeadline(readDeadLine)
...@@ -231,6 +240,7 @@ func (client *Client) handleDisconnectMessage(session getty.Session, packet *pro ...@@ -231,6 +240,7 @@ func (client *Client) handleDisconnectMessage(session getty.Session, packet *pro
fmt.Sprintf("Set upstream read deadline failed (sn:%d)", packet.SerialNumber), err) fmt.Sprintf("Set upstream read deadline failed (sn:%d)", packet.SerialNumber), err)
client.OnClose(session, upstreamConn, packet.SerialNumber) client.OnClose(session, upstreamConn, packet.SerialNumber)
} }
} else { } else {
traceRecorder.RecordEvent(trace.DisconnectEvent, fmt.Sprintf("The upstream connection is closed, do nothing (sn:%d)", packet.SerialNumber)) traceRecorder.RecordEvent(trace.DisconnectEvent, fmt.Sprintf("The upstream connection is closed, do nothing (sn:%d)", packet.SerialNumber))
} }
...@@ -256,7 +266,7 @@ func (client *Client) AddSession(packet *protocol.MajoraPacket, session *trace.S ...@@ -256,7 +266,7 @@ func (client *Client) AddSession(packet *protocol.MajoraPacket, session *trace.S
func (client *Client) GetRecorderFromSession(sn int64) trace.Recorder { func (client *Client) GetRecorderFromSession(sn int64) trace.Recorder {
session, ok := client.sessionStore.Load(sn) session, ok := client.sessionStore.Load(sn)
if !ok { if !ok {
log.Error().Errorf("[GetSession] get session failed, has one", sn) log.Run().Warnf("[GetRecorderFromSession] get session failed, maybe already closed (%d)", sn)
session = trace.NewSession("") session = trace.NewSession("")
} }
traceSession := session.(*trace.Session) traceSession := session.(*trace.Session)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment