diff options
Diffstat (limited to 'pkg/server/hook/split.go')
| -rw-r--r-- | pkg/server/hook/split.go | 37 |
1 files changed, 10 insertions, 27 deletions
diff --git a/pkg/server/hook/split.go b/pkg/server/hook/split.go index 6a2c4ca..59c8055 100644 --- a/pkg/server/hook/split.go +++ b/pkg/server/hook/split.go @@ -1,27 +1,24 @@ package hook import ( - "errors" - "strconv" "tunnel/pkg/server/env" - "tunnel/pkg/server/opts" "tunnel/pkg/server/queue" ) -const splitDefaultSize = 1024 - -var errBadSize = errors.New("bad size value") - type splitHook struct { - size int + Size int `opts:"positive,default:1024"` +} + +type splitPipe struct { + h *splitHook } -func (h *splitHook) Send(rq, wq queue.Q) error { +func (p splitPipe) Send(rq, wq queue.Q) error { for b := range rq { var upto int for n := 0; n < len(b); n = upto { - upto += h.size + upto += p.h.Size if upto > len(b) { upto = len(b) @@ -34,24 +31,10 @@ func (h *splitHook) Send(rq, wq queue.Q) error { return nil } -func (h *splitHook) Open(env.Env) (interface{}, error) { - return h, nil -} - -func newSplitHook(opts opts.Opts) (hook, error) { - size := splitDefaultSize - - if s, ok := opts["size"]; ok { - var err error - - if size, err = strconv.Atoi(s); err != nil || size <= 0 { - return nil, errBadSize - } - } - - return &splitHook{size: size}, nil +func (h *splitHook) New(env.Env) (interface{}, error) { + return &splitPipe{h}, nil } func init() { - register("split", newSplitHook) + register("split", splitHook{}) } |
