mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-12-22 19:33:32 +02:00
fix: handle error raised by dispatcher
This commit is contained in:
parent
dc72cf2c78
commit
bf35e9dcd6
1 changed files with 14 additions and 5 deletions
|
@ -51,12 +51,12 @@ func (v *Dispatcher) RemoveRay(dest net.Destination) {
|
|||
}
|
||||
}
|
||||
|
||||
func (v *Dispatcher) getInboundRay(ctx context.Context, dest net.Destination) *connEntry {
|
||||
func (v *Dispatcher) getInboundRay(ctx context.Context, dest net.Destination) (*connEntry, error) {
|
||||
v.Lock()
|
||||
defer v.Unlock()
|
||||
|
||||
if entry, found := v.conns[dest]; found {
|
||||
return entry
|
||||
return entry, nil
|
||||
}
|
||||
|
||||
newError("establishing new connection for ", dest).WriteToLog()
|
||||
|
@ -67,7 +67,12 @@ func (v *Dispatcher) getInboundRay(ctx context.Context, dest net.Destination) *c
|
|||
v.RemoveRay(dest)
|
||||
}
|
||||
timer := signal.CancelAfterInactivity(ctx, removeRay, time.Minute)
|
||||
link, _ := v.dispatcher.Dispatch(ctx, dest)
|
||||
|
||||
link, err := v.dispatcher.Dispatch(ctx, dest)
|
||||
if err != nil {
|
||||
return nil, newError("failed to dispatch request to ", dest).Base(err)
|
||||
}
|
||||
|
||||
entry := &connEntry{
|
||||
link: link,
|
||||
timer: timer,
|
||||
|
@ -75,14 +80,18 @@ func (v *Dispatcher) getInboundRay(ctx context.Context, dest net.Destination) *c
|
|||
}
|
||||
v.conns[dest] = entry
|
||||
go handleInput(ctx, entry, dest, v.callback)
|
||||
return entry
|
||||
return entry, nil
|
||||
}
|
||||
|
||||
func (v *Dispatcher) Dispatch(ctx context.Context, destination net.Destination, payload *buf.Buffer) {
|
||||
// TODO: Add user to destString
|
||||
newError("dispatch request to: ", destination).AtDebug().WriteToLog(session.ExportIDToError(ctx))
|
||||
|
||||
conn := v.getInboundRay(ctx, destination)
|
||||
conn, err := v.getInboundRay(ctx, destination)
|
||||
if err != nil {
|
||||
newError("failed to get inbound").Base(err).WriteToLog(session.ExportIDToError(ctx))
|
||||
return
|
||||
}
|
||||
outputStream := conn.link.Writer
|
||||
if outputStream != nil {
|
||||
if err := outputStream.WriteMultiBuffer(buf.MultiBuffer{payload}); err != nil {
|
||||
|
|
Loading…
Reference in a new issue