summaryrefslogtreecommitdiff
path: root/pkg/server/server.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-03-26 00:29:12 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-03-30 01:57:31 +0300
commit3c4432e0f2fb8ddf54a2e441063d584b99572a4e (patch)
treee1e36bed941a7bbb62b23656eeddd154eec0a920 /pkg/server/server.go
parent5c846ba3a0e5e323b61339572e7a4f917c1d79d4 (diff)
add tun socket
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