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