func (context *bootContext) startServer() { defer func() { ex.CatchException(warning(recover())) sigChan <- t.Bye }() var conf = t.Parse_d5sFile(context.config) context.setLogVerbose(conf.Verbose) log.Infoln(versionString()) log.Infoln("Server is listening on", conf.ListenAddr) ln, err := net.ListenTCP("tcp", conf.ListenAddr) if err != nil { log.Fatalln(err) } defer ln.Close() dhKeys := t.GenerateDHKeyPairs() server := t.NewServer(conf, dhKeys) context.statser = server for { conn, err := ln.AcceptTCP() if err == nil { go server.TunnelServe(conn) } else { t.SafeClose(conn) } } }
func NewClientMgr(d5c *t.D5ClientConf) *clientMgr { d5pArray := d5c.D5PList dhKeys := t.GenerateDHKeyPairs() num := len(d5pArray) var chain []byte if num > 1 { chain = make([]byte, 2*num) for i, _ := range chain { chain[i] = byte(i % num) } } mgr := &clientMgr{ dhKeys, d5pArray, make([]*t.Client, num), num, chain, } for i := 0; i < num; i++ { c := t.NewClient(d5pArray[i], dhKeys) mgr.clients[i] = c go c.StartTun(true) } return mgr }