summaryrefslogtreecommitdiff
path: root/pkg/server/tunnel.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/tunnel.go')
-rw-r--r--pkg/server/tunnel.go34
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