package module 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 splitModule struct { size int } func (m *splitModule) Send(rq, wq queue.Q) error { for b := range rq { var upto int for n := 0; n < len(b); n = upto { upto += m.size if upto > len(b) { upto = len(b) } wq <- b[n:upto] } } return nil } func (m *splitModule) Open(env.Env) (interface{}, error) { return m, nil } func newSplitModule(opts opts.Opts, env env.Env) (module, 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 &splitModule{size: size}, nil } func init() { register("split", newSplitModule) }