summaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/client/client.go14
-rw-r--r--pkg/netstring/netstring.go2
-rw-r--r--pkg/server/automap.go2
-rw-r--r--pkg/server/cmds.go16
-rw-r--r--pkg/server/env.go8
-rw-r--r--pkg/server/env/env.go5
-rw-r--r--pkg/server/module/alpha.go8
-rw-r--r--pkg/server/module/auth.go26
-rw-r--r--pkg/server/module/hex.go2
-rw-r--r--pkg/server/module/module.go12
-rw-r--r--pkg/server/queue/queue.go3
-rw-r--r--pkg/server/server.go50
-rw-r--r--pkg/server/socket/socket.go18
-rw-r--r--pkg/server/tunnel.go74
14 files changed, 121 insertions, 119 deletions
diff --git a/pkg/client/client.go b/pkg/client/client.go
index 8f5fc58..1264853 100644
--- a/pkg/client/client.go
+++ b/pkg/client/client.go
@@ -1,13 +1,13 @@
package client
import (
- "tunnel/pkg/config"
- "tunnel/pkg/netstring"
- "errors"
"bytes"
- "time"
- "net"
+ "errors"
"io"
+ "net"
+ "time"
+ "tunnel/pkg/config"
+ "tunnel/pkg/netstring"
)
var errClosed = errors.New("server closed connection")
@@ -26,9 +26,9 @@ func New() (*Client, error) {
}
func (c *Client) Send(args []string) (string, error) {
- c.conn.SetDeadline(time.Now().Add(config.IoTimeout));
+ c.conn.SetDeadline(time.Now().Add(config.IoTimeout))
- defer func () {
+ defer func() {
var t time.Time
c.conn.SetDeadline(t)
}()
diff --git a/pkg/netstring/netstring.go b/pkg/netstring/netstring.go
index 5b5273d..62507f9 100644
--- a/pkg/netstring/netstring.go
+++ b/pkg/netstring/netstring.go
@@ -43,7 +43,7 @@ func (d *Decoder) Decode() (out string, err error) {
return "", fmt.Errorf("netstring: %w", err)
}
- buf := make([]byte, n + 1)
+ buf := make([]byte, n+1)
_, err = io.ReadFull(d.r, buf)
if err != nil {
diff --git a/pkg/server/automap.go b/pkg/server/automap.go
index cf4de7d..67ae5b0 100644
--- a/pkg/server/automap.go
+++ b/pkg/server/automap.go
@@ -11,7 +11,7 @@ var errExists = errors.New("already exists")
var errNotFound = errors.New("no such entry")
func (m automap) add(v interface{}) string {
- for n := 1;; n++ {
+ for n := 1; ; n++ {
k := fmt.Sprintf("%d", n)
if _, ok := m[k]; !ok {
m[k] = v
diff --git a/pkg/server/cmds.go b/pkg/server/cmds.go
index 6eabbde..3ce7150 100644
--- a/pkg/server/cmds.go
+++ b/pkg/server/cmds.go
@@ -1,14 +1,14 @@
package server
import (
- "strings"
- "sort"
"log"
+ "sort"
+ "strings"
)
type cmd struct {
name string
- f func (r *request)
+ f func(r *request)
}
type node struct {
@@ -26,7 +26,7 @@ func newNode() *node {
return &node{m: map[string]*node{}}
}
-func newCmd(f func (r *request), where string) {
+func newCmd(f func(r *request), where string) {
path := strings.Split(where, " ")
node := cmds
@@ -50,7 +50,7 @@ func newCmd(f func (r *request), where string) {
node.c = &cmd{
name: where,
- f: f,
+ f: f,
}
}
@@ -64,7 +64,7 @@ func getCmd(path []string) (*cmd, []string) {
}
if node.c != nil {
- return node.c, path[n + 1:]
+ return node.c, path[n+1:]
}
}
@@ -74,9 +74,9 @@ func getCmd(path []string) (*cmd, []string) {
func help(r *request) {
var ss []string
- var walker func ([]string, *node)
+ var walker func([]string, *node)
- walker = func (path []string, node *node) {
+ walker = func(path []string, node *node) {
if node.c != nil {
ss = append(ss, strings.Join(path, " "))
return
diff --git a/pkg/server/env.go b/pkg/server/env.go
index 7b6b36d..bc9d4bf 100644
--- a/pkg/server/env.go
+++ b/pkg/server/env.go
@@ -27,7 +27,7 @@ func varDel(r *request) {
}
func varShow(r *request) {
- r.c.s.env.Each(func (k string, v string) bool {
+ r.c.s.env.Each(func(k string, v string) bool {
r.Println(k, v)
return true
})
@@ -38,9 +38,9 @@ func varClear(r *request) {
}
func init() {
- newCmd(varGet, "var get")
- newCmd(varSet, "var set")
- newCmd(varDel, "var del")
+ newCmd(varGet, "var get")
+ newCmd(varSet, "var set")
+ newCmd(varDel, "var del")
newCmd(varShow, "var show")
newCmd(varClear, "var clear")
}
diff --git a/pkg/server/env/env.go b/pkg/server/env/env.go
index affb4ef..fe8af25 100644
--- a/pkg/server/env/env.go
+++ b/pkg/server/env/env.go
@@ -16,6 +16,7 @@ type Env struct {
}
const namePattern = "[a-zA-Z][a-zA-Z0-9.]*"
+
var isNamePattern = regexp.MustCompile("^" + namePattern + "$").MatchString
var namePatternRe = regexp.MustCompile("@" + namePattern)
@@ -91,7 +92,7 @@ func (e *env) Del(key string) bool {
return true
}
-func (e *env) Each(f func (string, string) bool) {
+func (e *env) Each(f func(string, string) bool) {
e.Lock()
defer e.Unlock()
@@ -113,7 +114,7 @@ func (e *env) Eval(s string) string {
e.Lock()
defer e.Unlock()
- repl := func (v string) string {
+ repl := func(v string) string {
if v, ok := e.m[v[1:]]; ok {
return v
}
diff --git a/pkg/server/module/alpha.go b/pkg/server/module/alpha.go
index 9eb1e2c..4552c50 100644
--- a/pkg/server/module/alpha.go
+++ b/pkg/server/module/alpha.go
@@ -1,14 +1,14 @@
package module
import (
- "tunnel/pkg/server/queue"
- "unicode"
"bufio"
"io"
+ "tunnel/pkg/server/queue"
+ "unicode"
)
-func alpha(cb func (rune) rune) Pipe {
- return func (rq, wq queue.Q) error {
+func alpha(cb func(rune) rune) Pipe {
+ return func(rq, wq queue.Q) error {
r := bufio.NewReader(rq.Reader())
for {
diff --git a/pkg/server/module/auth.go b/pkg/server/module/auth.go
index 5dbdccb..f167874 100644
--- a/pkg/server/module/auth.go
+++ b/pkg/server/module/auth.go
@@ -1,16 +1,16 @@
package module
import (
- "tunnel/pkg/server/queue"
- "tunnel/pkg/server/opts"
- "tunnel/pkg/server/env"
- "tunnel/pkg/netstring"
- "encoding/hex"
- "crypto/rand"
"crypto/md5"
+ "crypto/rand"
+ "encoding/hex"
"errors"
"fmt"
"io"
+ "tunnel/pkg/netstring"
+ "tunnel/pkg/server/env"
+ "tunnel/pkg/server/opts"
+ "tunnel/pkg/server/queue"
)
const ChallengeLen = 16
@@ -26,10 +26,10 @@ type auth struct {
hash string
recvChallenge chan struct{}
- recvHash chan struct{}
+ recvHash chan struct{}
fail chan struct{}
- ok chan struct{}
+ ok chan struct{}
}
var errDupChallenge = errors.New("peer duplicates challenge")
@@ -150,17 +150,17 @@ func getAuthSecret(env env.Env) string {
func (m authModule) Open(env env.Env) (Pipe, Pipe) {
a := &auth{
- secret: getAuthSecret(env),
+ secret: getAuthSecret(env),
recvChallenge: make(chan struct{}),
- recvHash: make(chan struct{}),
- fail: make(chan struct{}),
- ok: make(chan struct{}),
+ recvHash: make(chan struct{}),
+ fail: make(chan struct{}),
+ ok: make(chan struct{}),
}
return a.Send, a.Recv
}
func init() {
- register("auth", func (opts.Opts, env.Env) (module, error) {
+ register("auth", func(opts.Opts, env.Env) (module, error) {
return authModule{}, nil
})
}
diff --git a/pkg/server/module/hex.go b/pkg/server/module/hex.go
index 9b80e0d..b632c11 100644
--- a/pkg/server/module/hex.go
+++ b/pkg/server/module/hex.go
@@ -1,8 +1,8 @@
package module
import (
- "tunnel/pkg/server/queue"
"encoding/hex"
+ "tunnel/pkg/server/queue"
)
func hexEncoder(rq, wq queue.Q) error {
diff --git a/pkg/server/module/module.go b/pkg/server/module/module.go
index 87bdd20..69fb90b 100644
--- a/pkg/server/module/module.go
+++ b/pkg/server/module/module.go
@@ -1,14 +1,14 @@
package module
import (
- "tunnel/pkg/server/queue"
- "tunnel/pkg/server/opts"
- "tunnel/pkg/server/env"
"fmt"
"log"
+ "tunnel/pkg/server/env"
+ "tunnel/pkg/server/opts"
+ "tunnel/pkg/server/queue"
)
-type moduleInitFunc func (opts.Opts, env.Env) (module, error)
+type moduleInitFunc func(opts.Opts, env.Env) (module, error)
var modules = map[string]moduleInitFunc{}
@@ -21,7 +21,7 @@ type M interface {
String() string
}
-type Pipe func (rq, wq queue.Q) error
+type Pipe func(rq, wq queue.Q) error
func (p Pipe) Open(env env.Env) (Pipe, Pipe) {
return p, nil
@@ -58,7 +58,7 @@ func register(name string, f moduleInitFunc) {
}
func registerPipe(name string, p Pipe) {
- register(name, func (opts.Opts, env.Env) (module, error) {
+ register(name, func(opts.Opts, env.Env) (module, error) {
return p, nil
})
}
diff --git a/pkg/server/queue/queue.go b/pkg/server/queue/queue.go
index 745d971..979fa33 100644
--- a/pkg/server/queue/queue.go
+++ b/pkg/server/queue/queue.go
@@ -42,7 +42,8 @@ func (q Q) Writer() io.Writer {
}
func (q Q) Dry() {
- for _ = range q {}
+ for _ = range q {
+ }
}
func (w *writer) Write(p []byte) (int, error) {
diff --git a/pkg/server/server.go b/pkg/server/server.go
index a7b9b06..571397f 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -1,23 +1,23 @@
package server
import (
- "tunnel/pkg/config"
- "tunnel/pkg/netstring"
- "tunnel/pkg/server/env"
- "strings"
- "errors"
"bytes"
- "sync"
- "time"
+ "errors"
"fmt"
+ "io"
"log"
"net"
- "io"
+ "strings"
+ "sync"
+ "time"
+ "tunnel/pkg/config"
+ "tunnel/pkg/netstring"
+ "tunnel/pkg/server/env"
)
type Server struct {
listen net.Listener
- since time.Time
+ since time.Time
wg sync.WaitGroup
mu sync.Mutex
@@ -26,7 +26,7 @@ type Server struct {
done chan struct{}
tunnels automap
- env env.Env
+ env env.Env
nextCid int
}
@@ -87,7 +87,7 @@ func (r *request) Fatalf(format string, v ...interface{}) {
}
func (r *request) expect(c ...int) {
- desc := func (n int) string {
+ desc := func(n int) string {
var sep string
if n == 1 {
@@ -99,7 +99,7 @@ func (r *request) expect(c ...int) {
return fmt.Sprint(n, sep, "expected")
}
- check := func (cond bool, args ...interface{}) {
+ check := func(cond bool, args ...interface{}) {
if cond {
r.Fatal(args...)
}
@@ -119,7 +119,7 @@ func (r *request) expect(c ...int) {
func (s *Server) isDone() bool {
select {
- case <- s.done:
+ case <-s.done:
return true
default:
return false
@@ -133,10 +133,10 @@ func New() (*Server, error) {
}
s := &Server{
- env: env.New(),
- listen: listen,
- since: time.Now(),
- done: make(chan struct{}),
+ env: env.New(),
+ listen: listen,
+ since: time.Now(),
+ done: make(chan struct{}),
tunnels: make(automap),
}
@@ -168,7 +168,7 @@ func (s *Server) Run() {
}
func (s *Server) Stop() {
- s.once.Do(func () {
+ s.once.Do(func() {
close(s.done)
s.listen.Close()
})
@@ -176,9 +176,9 @@ func (s *Server) Stop() {
func (s *Server) newClient(conn net.Conn) *client {
c := &client{
- s: s,
- conn: conn,
- id: s.nextCid,
+ s: s,
+ conn: conn,
+ id: s.nextCid,
}
s.nextCid++
@@ -188,9 +188,9 @@ func (s *Server) newClient(conn net.Conn) *client {
func (c *client) newRequest() *request {
r := &request{
- c: c,
- id: c.nextRid,
- out: new(bytes.Buffer),
+ c: c,
+ id: c.nextRid,
+ out: new(bytes.Buffer),
}
c.nextRid++
@@ -275,7 +275,7 @@ func (r *request) parse(query string) {
}
func (r *request) run(query string) {
- defer func () {
+ defer func() {
switch err := recover().(type) {
case requestError:
r.Print(err)
diff --git a/pkg/server/socket/socket.go b/pkg/server/socket/socket.go
index c6219a5..48a650c 100644
--- a/pkg/server/socket/socket.go
+++ b/pkg/server/socket/socket.go
@@ -1,14 +1,14 @@
package socket
import (
- "tunnel/pkg/server/queue"
- "tunnel/pkg/server/opts"
- "tunnel/pkg/server/env"
- "strings"
- "sync"
"fmt"
"log"
"net"
+ "strings"
+ "sync"
+ "tunnel/pkg/server/env"
+ "tunnel/pkg/server/opts"
+ "tunnel/pkg/server/queue"
)
type Channel interface {
@@ -24,7 +24,7 @@ type S interface {
type listenSocket struct {
proto, addr string
- listen net.Listener
+ listen net.Listener
}
type dialSocket struct {
@@ -69,7 +69,7 @@ func (cc *connChannel) String() string {
func (cc *connChannel) shutdown(err *error) {
miss := true
- cc.once.Do(func () {
+ cc.once.Do(func() {
miss = false
log.Println("close", cc)
if e := cc.conn.Close(); e != nil && *err != nil {
@@ -100,8 +100,8 @@ func newListenSocket(proto, addr string) (S, error) {
}
s := &listenSocket{
- proto: proto,
- addr: addr,
+ proto: proto,
+ addr: addr,
listen: listen,
}
diff --git a/pkg/server/tunnel.go b/pkg/server/tunnel.go
index 32c81c3..58ae0e1 100644
--- a/pkg/server/tunnel.go
+++ b/pkg/server/tunnel.go
@@ -1,29 +1,29 @@
package server
import (
- "tunnel/pkg/server/socket"
- "tunnel/pkg/server/module"
- "tunnel/pkg/server/queue"
- "tunnel/pkg/server/env"
- "tunnel/pkg/config"
- "strings"
- "time"
- "sort"
- "sync"
"fmt"
"log"
+ "sort"
+ "strings"
+ "sync"
+ "time"
+ "tunnel/pkg/config"
+ "tunnel/pkg/server/env"
+ "tunnel/pkg/server/module"
+ "tunnel/pkg/server/queue"
+ "tunnel/pkg/server/socket"
)
type stream struct {
- id int
- t *tunnel
- since time.Time
- wg sync.WaitGroup
+ id int
+ t *tunnel
+ since time.Time
+ wg sync.WaitGroup
in, out socket.Channel
}
type tunnel struct {
- id string
+ id string
args string
streams map[int]*stream
@@ -37,7 +37,7 @@ type tunnel struct {
done chan struct{}
in, out socket.S
- m []module.M
+ m []module.M
env env.Env
}
@@ -99,7 +99,7 @@ func (t *tunnel) serve() {
wg.Add(1)
- go func () {
+ go func() {
t.handle(in)
wg.Done()
}()
@@ -128,10 +128,10 @@ func (t *tunnel) handle(in socket.Channel) {
func (t *tunnel) newStream(in, out socket.Channel) *stream {
s := &stream{
- t: t,
- in: in,
- out: out,
- id: t.nextSid,
+ t: t,
+ in: in,
+ out: out,
+ id: t.nextSid,
since: time.Now(),
}
@@ -142,7 +142,7 @@ func (t *tunnel) newStream(in, out socket.Channel) *stream {
t.streams[s.id] = s
t.mu.Unlock()
- go func () {
+ go func() {
s.wg.Wait()
s.t.mu.Lock()
@@ -158,7 +158,7 @@ func (t *tunnel) newStream(in, out socket.Channel) *stream {
}
func (s *stream) channel(c socket.Channel, rq, wq queue.Q) {
- watch := func (q queue.Q, f func (q queue.Q) error) {
+ watch := func(q queue.Q, f func(q queue.Q) error) {
defer s.wg.Done()
if err := f(q); err != nil {
@@ -168,12 +168,12 @@ func (s *stream) channel(c socket.Channel, rq, wq queue.Q) {
s.wg.Add(2)
- go func () {
+ go func() {
watch(wq, c.Send)
close(wq)
}()
- go func () {
+ go func() {
watch(rq, c.Recv)
rq.Dry()
}()
@@ -182,7 +182,7 @@ 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) {
s.wg.Add(1)
- go func () {
+ go func() {
defer s.wg.Done()
if err := p(rq, wq); err != nil {
@@ -287,13 +287,13 @@ func newTunnel(args []string, env env.Env) (*tunnel, error) {
}
t := &tunnel{
- args: strings.Join(args, " "),
- quit: make(chan struct{}),
- done: make(chan struct{}),
- m: mm,
- in: in,
- out: out,
- env: env,
+ args: strings.Join(args, " "),
+ quit: make(chan struct{}),
+ done: make(chan struct{}),
+ m: mm,
+ in: in,
+ out: out,
+ env: env,
streams: make(map[int]*stream),
}
@@ -372,7 +372,7 @@ func tunnelRename(r *request) {
}
}
-func foreachTunnel(m automap, f func (t *tunnel)) {
+func foreachTunnel(m automap, f func(t *tunnel)) {
var keys []string
for k := range m {
@@ -386,7 +386,7 @@ func foreachTunnel(m automap, f func (t *tunnel)) {
}
}
-func foreachStream(m map[int]*stream, f func (s *stream)) {
+func foreachStream(m map[int]*stream, f func(s *stream)) {
var keys []int
for k := range m {
@@ -401,20 +401,20 @@ func foreachStream(m map[int]*stream, f func (s *stream)) {
}
func tunnelShow(r *request) {
- foreachTunnel(r.c.s.tunnels, func (t *tunnel) {
+ foreachTunnel(r.c.s.tunnels, func(t *tunnel) {
r.Println(t.id, t.args)
})
}
func streamShow(r *request) {
- foreachTunnel(r.c.s.tunnels, func (t *tunnel) {
+ foreachTunnel(r.c.s.tunnels, func(t *tunnel) {
t.mu.Lock()
defer t.mu.Unlock()
if len(t.streams) > 0 {
r.Println(t.id, t.args)
- foreachStream(t.streams, func (s *stream) {
+ foreachStream(t.streams, func(s *stream) {
tm := s.since.Format(config.TimeFormat)
r.Println("\t", s.id, tm, s.in, s.out)
})