Browse Source

Public key add bug

刘河 6 years ago
parent
commit
037e7b28f1
1 changed files with 13 additions and 12 deletions
  1. 13 12
      bridge/bridge.go

+ 13 - 12
bridge/bridge.go

@@ -344,7 +344,7 @@ func (s *Bridge) ping() {
 //get config and add task from client config
 func (s *Bridge) getConfig(c *conn.Conn, isPub bool, client *file.Client) {
 	var fail bool
-
+loop:
 	for {
 		flag, err := c.ReadFlag()
 		if err != nil {
@@ -353,12 +353,12 @@ func (s *Bridge) getConfig(c *conn.Conn, isPub bool, client *file.Client) {
 		switch flag {
 		case common.WORK_STATUS:
 			if b, err := c.GetShortContent(32); err != nil {
-				break
+				break loop
 			} else {
 				var str string
 				id, err := file.GetCsvDb().GetClientIdByVkey(string(b))
 				if err != nil {
-					break
+					break loop
 				}
 				for _, v := range file.GetCsvDb().Hosts {
 					if v.Client.Id == id {
@@ -378,12 +378,12 @@ func (s *Bridge) getConfig(c *conn.Conn, isPub bool, client *file.Client) {
 			if client, err = c.GetConfigInfo(); err != nil {
 				fail = true
 				c.WriteAddFail()
-				break
+				break loop
 			} else {
 				if err = file.GetCsvDb().NewClient(client); err != nil {
 					fail = true
 					c.WriteAddFail()
-					break
+					break loop
 				}
 				c.WriteAddOk()
 				c.Write([]byte(client.VerifyKey))
@@ -396,7 +396,7 @@ func (s *Bridge) getConfig(c *conn.Conn, isPub bool, client *file.Client) {
 			if err != nil {
 				fail = true
 				c.WriteAddFail()
-				break
+				break loop
 			}
 			h.Client = client
 			if h.Location == "" {
@@ -406,7 +406,7 @@ func (s *Bridge) getConfig(c *conn.Conn, isPub bool, client *file.Client) {
 				if file.GetCsvDb().IsHostExist(h) {
 					fail = true
 					c.WriteAddFail()
-					break
+					break loop
 				} else {
 					file.GetCsvDb().NewHost(h)
 					c.WriteAddOk()
@@ -418,21 +418,21 @@ func (s *Bridge) getConfig(c *conn.Conn, isPub bool, client *file.Client) {
 			if t, err := c.GetTaskInfo(); err != nil {
 				fail = true
 				c.WriteAddFail()
-				break
+				break loop
 			} else {
 				ports := common.GetPorts(t.Ports)
 				targets := common.GetPorts(t.Target)
 				if len(ports) > 1 && (t.Mode == "tcp" || t.Mode == "udp") && (len(ports) != len(targets)) {
 					fail = true
 					c.WriteAddFail()
-					break
+					break loop
 				} else if t.Mode == "secret" {
 					ports = append(ports, 0)
 				}
 				if len(ports) == 0 {
 					fail = true
 					c.WriteAddFail()
-					break
+					break loop
 				}
 				for i := 0; i < len(ports); i++ {
 					tl := new(file.Tunnel)
@@ -462,12 +462,12 @@ func (s *Bridge) getConfig(c *conn.Conn, isPub bool, client *file.Client) {
 							logs.Notice("Add task error ", err.Error())
 							fail = true
 							c.WriteAddFail()
-							break
+							break loop
 						}
 						if b := tool.TestServerPort(tl.Port, tl.Mode); !b && t.Mode != "secret" && t.Mode != "p2p" {
 							fail = true
 							c.WriteAddFail()
-							break
+							break loop
 						} else {
 							s.OpenTask <- tl
 						}
@@ -478,6 +478,7 @@ func (s *Bridge) getConfig(c *conn.Conn, isPub bool, client *file.Client) {
 		}
 	}
 	if fail && client != nil {
+		file.GetCsvDb().DelClient(client.Id)
 		s.DelClient(client.Id, false)
 	}
 	c.Close()