diff --git a/dbus/base.go b/dbus/base.go index 3edd511d54372e8adb4ad72ef83d0e4fc16e473f..4e33adf84d91651c91ca8072b96621117f46b998 100644 --- a/dbus/base.go +++ b/dbus/base.go @@ -46,4 +46,12 @@ func (p *baseClient) SendError(err string) error { Status: 0, Data: []byte(err), }) +} + +func (p *baseClient) Disconnect(info string) error { + return p.Send(&packet.Packet{ + Type: packet.TypeDisconnect, + Status: 0, + Data: []byte(info), + }) } \ No newline at end of file diff --git a/dbus/peer.go b/dbus/peer.go index c85ac3e6b78e367be15125a5ebadb65a99c4b35b..044a391cf9507a59dc81c054b3bf42fe14829064 100644 --- a/dbus/peer.go +++ b/dbus/peer.go @@ -1,10 +1,10 @@ package dbus import ( + "fmt" "github.com/zgwit/dtu-admin/base" "github.com/zgwit/dtu-admin/dtu" "github.com/zgwit/dtu-admin/packet" - "log" "sync" "time" ) @@ -18,7 +18,7 @@ type Peer struct { func (p *Peer) Handle(msg *packet.Packet) { switch msg.Type { case packet.TypeConnect: - _ = p.SendError("duplicate register") + _ = p.Disconnect("duplicate register") _ = p.CLose() case packet.TypeHeartBeak: case packet.TypePing: @@ -26,7 +26,7 @@ func (p *Peer) Handle(msg *packet.Packet) { case packet.TypeTransfer: p.handleTransfer(msg) default: - log.Println("unknown command", msg) + _ = p.SendError(fmt.Sprintf("unknown command %d", msg.Type)) } } diff --git a/dbus/plugin.go b/dbus/plugin.go index c34dea5d5ee3753e35ced3985623a1fcb71bfda2..72ce1f64cbc032e5556946e83ba8d38966327ea8 100644 --- a/dbus/plugin.go +++ b/dbus/plugin.go @@ -12,16 +12,15 @@ type Plugin struct { func (p *Plugin) Handle(msg *packet.Packet) { switch msg.Type { case packet.TypeConnect: - _ = p.SendError("duplicate register") + _ = p.Disconnect("duplicate register") _ = p.CLose() - //p.handleConnect(msg) case packet.TypeHeartBeak: case packet.TypePing: _ = p.Send(&packet.Packet{Type: packet.TypePong}) case packet.TypeTransfer: p.handleTransfer(msg) default: - log.Println("unknown command", msg) + _ = p.SendError(fmt.Sprintf("unknown command %d", msg.Type)) } } diff --git a/dbus/server.go b/dbus/server.go index 40b9e482c97d76fa043e5f493b7ca17d9e3a65c8..6a68255fe421c9d74330cd915708b6d595bc57d4 100644 --- a/dbus/server.go +++ b/dbus/server.go @@ -66,13 +66,18 @@ func (s *Server) receive(conn net.Conn) { _ = conn.Close() return } - //根据第一个包创建客户羰 + //根据第一个包创建客户 c, e := s.createTunnel(conn, packs[0]) if e != nil { - _, _ = conn.Write([]byte(e.Error())) + p := packet.Packet{ + Type: packet.TypeDisconnect, + Data: []byte(e.Error()), + } + _, _ = conn.Write(p.Encode()) _ = conn.Close() return } + //处理第一次接收的剩余包(网络拥堵时,可能会发生) for _, pack := range packs[1:] { c.Handle(pack) @@ -117,6 +122,8 @@ func (s *Server) createTunnel(conn net.Conn, p *packet.Packet) (base.Tunnel, err link := v.(*dtu.Link) peer := &Peer{baseClient: baseClient{conn: conn}, link: link} link.Peer(peer) + //TODO 回复ConnectAck,连接信息 + return peer, nil case "plugin": //TODO 解析 plugin:key:secret diff --git a/go.sum b/go.sum index 7eaf7ef401d9ba5aa37c8b56be421c4d1528bba5..3be45fecf7c015062f2d44afe96b55896974d902 100644 --- a/go.sum +++ b/go.sum @@ -128,5 +128,3 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=