Skip to content

Commit 2245a0e

Browse files
author
null
committed
DispatchLink
1 parent 11a7990 commit 2245a0e

File tree

1 file changed

+13
-49
lines changed

1 file changed

+13
-49
lines changed

proxy/hysteria/server.go

Lines changed: 13 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import (
1212
"github.com/xtls/xray-core/common/net"
1313
"github.com/xtls/xray-core/common/protocol"
1414
"github.com/xtls/xray-core/common/session"
15-
"github.com/xtls/xray-core/common/signal"
16-
"github.com/xtls/xray-core/common/task"
1715
"github.com/xtls/xray-core/core"
1816
"github.com/xtls/xray-core/features/policy"
1917
"github.com/xtls/xray-core/features/routing"
@@ -172,6 +170,15 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con
172170
}
173171
common.Must(conn.SetReadDeadline(time.Time{}))
174172

173+
bufferedWriter := buf.NewBufferedWriter(buf.NewWriter(conn))
174+
err = WriteTCPResponse(bufferedWriter, true, "")
175+
if err != nil {
176+
return errors.New("failed to write response").Base(err)
177+
}
178+
if err := bufferedWriter.SetBuffered(false); err != nil {
179+
return err
180+
}
181+
175182
dest := common.Must2(net.ParseDestination("tcp:" + addr))
176183
ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{
177184
From: conn.RemoteAddr(),
@@ -182,53 +189,10 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con
182189
})
183190
errors.LogInfo(ctx, "tunnelling request to ", dest)
184191

185-
ctx, cancel := context.WithCancel(ctx)
186-
timer := signal.CancelAfterInactivity(ctx, cancel, sessionPolicy.Timeouts.ConnectionIdle)
187-
188-
ctx = policy.ContextWithBufferPolicy(ctx, sessionPolicy.Buffer)
189-
link, err := dispatcher.Dispatch(ctx, dest)
190-
if err != nil {
191-
return err
192-
}
193-
194-
responseDone := func() error {
195-
defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly)
196-
197-
bufferedWriter := buf.NewBufferedWriter(buf.NewWriter(conn))
198-
err = WriteTCPResponse(bufferedWriter, true, "")
199-
if err != nil {
200-
return errors.New("failed to write response").Base(err)
201-
}
202-
203-
if err := bufferedWriter.SetBuffered(false); err != nil {
204-
return err
205-
}
206-
207-
if err := buf.Copy(link.Reader, bufferedWriter, buf.UpdateActivity(timer)); err != nil {
208-
return errors.New("failed to transport all TCP response").Base(err)
209-
}
210-
211-
return nil
212-
}
213-
214-
requestDone := func() error {
215-
defer timer.SetTimeout(sessionPolicy.Timeouts.DownlinkOnly)
216-
217-
if err := buf.Copy(buf.NewReader(conn), link.Writer, buf.UpdateActivity(timer)); err != nil {
218-
return errors.New("failed to transport all TCP request").Base(err)
219-
}
220-
221-
return nil
222-
}
223-
224-
requestDoneAndCloseWriter := task.OnSuccess(requestDone, task.Close(link.Writer))
225-
if err := task.Run(ctx, requestDoneAndCloseWriter, responseDone); err != nil {
226-
common.Interrupt(link.Reader)
227-
common.Interrupt(link.Writer)
228-
return errors.New("connection ends").Base(err)
229-
}
230-
231-
return nil
192+
return dispatcher.DispatchLink(ctx, dest, &transport.Link{
193+
Reader: buf.NewReader(conn),
194+
Writer: bufferedWriter,
195+
})
232196
}
233197
}
234198

0 commit comments

Comments
 (0)