diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2020-02-26 02:38:02 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2020-02-26 02:38:57 +0300 |
| commit | e6631acaa5af979d87645d74997955a1304cd648 (patch) | |
| tree | ba1a13102d437bc908a7c32ce604a802d5098868 /pkg/server/tunnel.go | |
| parent | d6b87d6ad43219bf5b9cdfef50697e1b066dc4ea (diff) | |
[server] prepare module.Open to return error
Diffstat (limited to 'pkg/server/tunnel.go')
| -rw-r--r-- | pkg/server/tunnel.go | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/pkg/server/tunnel.go b/pkg/server/tunnel.go index 49f684e..5a5e302 100644 --- a/pkg/server/tunnel.go +++ b/pkg/server/tunnel.go @@ -19,6 +19,7 @@ import ( type stream struct { id int t *tunnel + env env.Env since time.Time wg sync.WaitGroup in, out socket.Channel @@ -134,9 +135,12 @@ func (t *tunnel) newStream(in, out socket.Channel) *stream { in: in, out: out, id: t.nextSid, + env: t.env.Copy(), since: time.Now(), } + s.env.Set("tunnel", t.id) + s.run() t.mu.Lock() @@ -181,13 +185,13 @@ func (s *stream) channel(c socket.Channel, rq, wq queue.Q) { }() } -func (s *stream) pipe(m module.M, p module.Pipe, rq, wq queue.Q) { +func (s *stream) pipe(m module.M, f module.Func, rq, wq queue.Q) { s.wg.Add(1) go func() { defer s.wg.Done() - if err := p(rq, wq); err != nil && !errors.Is(err, io.EOF) { + if err := f(rq, wq); err != nil && !errors.Is(err, io.EOF) { log.Println(s.t, s, m, err) } @@ -197,9 +201,6 @@ func (s *stream) pipe(m module.M, p module.Pipe, rq, wq queue.Q) { } func (s *stream) run() { - env := s.t.env.Copy() - env.Set("tunnel", s.t.id) - s.t.wg.Add(1) rq, wq := queue.New(), queue.New() @@ -207,12 +208,14 @@ func (s *stream) run() { s.channel(s.in, rq, wq) for _, m := range s.t.m { - send, recv := m.Open(env) + send, recv, _ := module.Open(m, s.env) + if send != nil { q := queue.New() s.pipe(m, send, wq, q) wq = q } + if recv != nil { q := queue.New() s.pipe(m, recv, q, rq) @@ -232,24 +235,11 @@ func parseModules(args []string, env env.Env) ([]module.M, error) { var mm []module.M for _, arg := range args { - var reverse bool - var m module.M - var err error - - if strings.HasPrefix(arg, "-") { - reverse = true - arg = arg[1:] - } - - if m, err = module.New(arg, env); err != nil { + if m, err := module.New(arg, env); err != nil { return nil, err + } else { + mm = append(mm, m) } - - if reverse { - m = module.Reverse(m) - } - - mm = append(mm, m) } return mm, nil |
