MCPcopy
hub / github.com/ph4ntonn/Stowaway / LetSocks

Method LetSocks

admin/handler/socks.go:26–80  ·  view source on GitHub ↗
(mgr *manager.Manager, route string, uuid string)

Source from the content-addressed store, hash-verified

24}
25
26func (socks *Socks) LetSocks(mgr *manager.Manager, route string, uuid string) error {
27 addr := fmt.Sprintf("0.0.0.0:%s", socks.Port)
28 listener, err := net.Listen("tcp", addr)
29 if err != nil {
30 return err
31 }
32
33 // register brand new socks service
34 mgrTask := &manager.SocksTask{
35 Mode: manager.S_NEWSOCKS,
36 UUID: uuid,
37 SocksPort: socks.Port,
38 SocksUsername: socks.Username,
39 SocksPassword: socks.Password,
40 SocksTCPListener: listener,
41 }
42
43 mgr.SocksManager.TaskChan <- mgrTask
44 result := <-mgr.SocksManager.ResultChan // wait for "add" done
45 if !result.OK { // node and socks service must be one-to-one
46 err := errors.New("Socks has already running on current node! Use 'stopsocks' to stop the old one")
47 listener.Close()
48 return err
49 }
50
51 sMessage := protocol.PrepareAndDecideWhichSProtoToLower(global.G_Component.Conn, global.G_Component.Secret, global.G_Component.UUID)
52
53 header := &protocol.Header{
54 Sender: protocol.ADMIN_UUID,
55 Accepter: uuid,
56 MessageType: protocol.SOCKSSTART,
57 RouteLen: uint32(len([]byte(route))),
58 Route: route,
59 }
60
61 socksStartMess := &protocol.SocksStart{
62 UsernameLen: uint64(len([]byte(socks.Username))),
63 Username: socks.Username,
64 PasswordLen: uint64(len([]byte(socks.Password))),
65 Password: socks.Password,
66 }
67
68 protocol.ConstructMessage(sMessage, header, socksStartMess, false)
69 sMessage.SendMessage()
70
71 if ready := <-mgr.SocksManager.SocksReady; !ready {
72 err := errors.New("fail to start socks.If you just stop socks service,please wait for the cleanup done")
73 StopSocks(mgr, uuid)
74 return err
75 }
76
77 go socks.handleSocksListener(mgr, listener, route, uuid)
78
79 return nil
80}
81
82func (socks *Socks) handleSocksListener(mgr *manager.Manager, listener net.Listener, route string, uuid string) {
83 for {

Callers 2

Calls 5

handleSocksListenerMethod · 0.95
ConstructMessageFunction · 0.92
StopSocksFunction · 0.85
SendMessageMethod · 0.65

Tested by

no test coverage detected