summaryrefslogtreecommitdiff
path: root/pkg/server/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/server.go')
-rw-r--r--pkg/server/server.go17
1 files changed, 9 insertions, 8 deletions
diff --git a/pkg/server/server.go b/pkg/server/server.go
index 6f3c312..e794b56 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -10,7 +10,6 @@ import (
"strings"
"sync"
"time"
- "tunnel/pkg/config"
"tunnel/pkg/netstring"
"tunnel/pkg/server/env"
)
@@ -37,6 +36,8 @@ type client struct {
s *Server
conn net.Conn
+ r *netstring.Decoder
+ w *netstring.Encoder
nextRid int
}
@@ -133,7 +134,7 @@ func (s *Server) isDone() bool {
}
func New(path string) (*Server, error) {
- listen, err := net.Listen("unixpacket", path)
+ listen, err := net.Listen("unix", path)
if err != nil {
return nil, err
}
@@ -194,6 +195,8 @@ func (s *Server) newClient(conn net.Conn) *client {
c := &client{
s: s,
conn: conn,
+ r: netstring.NewDecoder(conn),
+ w: netstring.NewEncoder(conn),
id: s.nextCid,
}
@@ -234,18 +237,16 @@ func (c *client) newRequest() *request {
func (c *client) handle() {
defer c.close()
- buf := make([]byte, config.BufSize)
-
for {
- nr, er := c.conn.Read(buf)
+ req, er := c.r.Decode()
if er != nil {
- if er != io.EOF {
+ if !errors.Is(er, io.EOF) {
log.Println(c, "handle:", er)
}
break
}
- args, err := c.decode(buf[:nr])
+ args, err := c.decode([]byte(req))
if err != nil {
log.Println(c, "decode:", err)
break
@@ -259,7 +260,7 @@ func (c *client) handle() {
r.out.Write([]byte("\n"))
}
- _, ew := c.conn.Write(r.out.Bytes())
+ ew := c.w.Encode(r.out.String())
if ew != nil {
log.Println(c, "handle:", ew)
break