1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2026-02-08 01:05:24 -05:00

refactor timer api

This commit is contained in:
Darien Raymond
2017-03-31 21:45:43 +02:00
parent a57531ef5d
commit f34ad57b58
11 changed files with 25 additions and 59 deletions

View File

@@ -90,17 +90,13 @@ func (v *Client) Process(ctx context.Context, outboundRay ray.OutboundRay, diale
request.Option |= RequestOptionOneTimeAuth
}
ctx, cancel := context.WithCancel(ctx)
defer cancel()
timer := signal.CancelAfterInactivity(ctx, cancel, time.Minute*2)
ctx, timer := signal.CancelAfterInactivity(ctx, time.Minute*2)
if request.Command == protocol.RequestCommandTCP {
bufferedWriter := buf.NewBufferedWriter(conn)
bodyWriter, err := WriteTCPRequest(request, bufferedWriter)
if err != nil {
log.Info("Shadowsocks|Client: Failed to write request: ", err)
return err
return errors.Base(err).Message("Shadowsocks|Client: Failed to write request")
}
if err := bufferedWriter.SetBuffered(false); err != nil {
@@ -131,8 +127,7 @@ func (v *Client) Process(ctx context.Context, outboundRay ray.OutboundRay, diale
})
if err := signal.ErrorOrFinish2(ctx, requestDone, responseDone); err != nil {
log.Info("Shadowsocks|Client: Connection ends with ", err)
return err
return errors.Base(err).Message("Shadowsocks|Client: Connection ends.")
}
return nil
@@ -147,8 +142,7 @@ func (v *Client) Process(ctx context.Context, outboundRay ray.OutboundRay, diale
requestDone := signal.ExecuteAsync(func() error {
if err := buf.PipeUntilEOF(timer, outboundRay.OutboundInput(), writer); err != nil {
log.Info("Shadowsocks|Client: Failed to transport all UDP request: ", err)
return err
return errors.Base(err).Message("Shadowsocks|Client: Failed to transport all UDP request")
}
return nil
})
@@ -162,15 +156,13 @@ func (v *Client) Process(ctx context.Context, outboundRay ray.OutboundRay, diale
}
if err := buf.PipeUntilEOF(timer, reader, outboundRay.OutboundOutput()); err != nil {
log.Info("Shadowsocks|Client: Failed to transport all UDP response: ", err)
return err
return errors.Base(err).Message("Shadowsocks|Client: Failed to transport all UDP response.")
}
return nil
})
if err := signal.ErrorOrFinish2(ctx, requestDone, responseDone); err != nil {
log.Info("Shadowsocks|Client: Connection ends with ", err)
return err
return errors.Base(err).Message("Shadowsocks|Client: Connection ends.")
}
return nil

View File

@@ -134,8 +134,7 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection,
request, bodyReader, err := ReadTCPSession(s.user, bufferedReader)
if err != nil {
log.Access(conn.RemoteAddr(), "", log.AccessRejected, err)
log.Info("Shadowsocks|Server: Failed to create request from: ", conn.RemoteAddr(), ": ", err)
return err
return errors.Base(err).Message("Shadowsocks|Server: Failed to create request from: ", conn.RemoteAddr())
}
conn.SetReadDeadline(time.Time{})
@@ -147,9 +146,8 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection,
ctx = protocol.ContextWithUser(ctx, request.User)
ctx, cancel := context.WithCancel(ctx)
userSettings := s.user.GetSettings()
timer := signal.CancelAfterInactivity(ctx, cancel, userSettings.PayloadTimeout)
ctx, timer := signal.CancelAfterInactivity(ctx, userSettings.PayloadTimeout)
ray, err := dispatcher.Dispatch(ctx, dest)
if err != nil {
return err
@@ -159,8 +157,7 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection,
bufferedWriter := buf.NewBufferedWriter(conn)
responseWriter, err := WriteTCPResponse(request, bufferedWriter)
if err != nil {
log.Warning("Shadowsocks|Server: Failed to write response: ", err)
return err
return errors.Base(err).Message("Shadowsocks|Server: Failed to write response.")
}
payload, err := ray.InboundOutput().Read()
@@ -177,8 +174,7 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection,
}
if err := buf.PipeUntilEOF(timer, ray.InboundOutput(), responseWriter); err != nil {
log.Info("Shadowsocks|Server: Failed to transport all TCP response: ", err)
return err
return errors.Base(err).Message("Shadowsocks|Server: Failed to transport all TCP response.")
}
return nil
@@ -188,18 +184,15 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection,
defer ray.InboundInput().Close()
if err := buf.PipeUntilEOF(timer, bodyReader, ray.InboundInput()); err != nil {
log.Info("Shadowsocks|Server: Failed to transport all TCP request: ", err)
return err
return errors.Base(err).Message("Shadowsocks|Server: Failed to transport all TCP request.")
}
return nil
})
if err := signal.ErrorOrFinish2(ctx, requestDone, responseDone); err != nil {
log.Info("Shadowsocks|Server: Connection ends with ", err)
cancel()
ray.InboundInput().CloseError()
ray.InboundOutput().CloseError()
return err
return errors.Base(err).Message("Shadowsocks|Server: Connection ends.")
}
runtime.KeepAlive(timer)