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 } func (h *splitHook) Send(rq, wq queue.Q) error { for b := range rq { var upto int for n := 0; n < len(b); n = upto { upto += h.size if upto > len(b) { upto = len(b) } wq <- b[n:upto] } } 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 init() { register("split", newSplitHook) }