func()

in src/sessionmanagerplugin/session/portsession/muxportforwarding.go [229:284]


func (p *MuxPortForwarding) handleClientConnections(log log.T, ctx context.Context) (err error) {
	var (
		listener   net.Listener
		displayMsg string
	)

	if p.portParameters.LocalConnectionType == "unix" {
		if listener, err = net.Listen(p.portParameters.LocalConnectionType, p.portParameters.LocalUnixSocket); err != nil {
			return err
		}
		displayMsg = fmt.Sprintf("Unix socket %s opened for sessionId %s.", p.portParameters.LocalUnixSocket, p.sessionId)
	} else {
		localPortNumber := p.portParameters.LocalPortNumber
		if p.portParameters.LocalPortNumber == "" {
			localPortNumber = "0"
		}
		if listener, err = net.Listen("tcp", "localhost:"+localPortNumber); err != nil {
			return err
		}
		p.portParameters.LocalPortNumber = strconv.Itoa(listener.Addr().(*net.TCPAddr).Port)
		displayMsg = fmt.Sprintf("Port %s opened for sessionId %s.", p.portParameters.LocalPortNumber, p.sessionId)
	}

	defer listener.Close()

	log.Infof(displayMsg)
	fmt.Printf(displayMsg)

	log.Infof("Waiting for connections...\n")
	fmt.Printf("\nWaiting for connections...\n")

	var once sync.Once
	for {
		select {
		case <-ctx.Done():
			return ctx.Err()
		default:
			if conn, err := listener.Accept(); err != nil {
				log.Errorf("Error while accepting connection: %v", err)
			} else {
				log.Infof("Connection accepted from %s\n for session [%s]", conn.RemoteAddr(), p.sessionId)

				once.Do(func() {
					fmt.Printf("\nConnection accepted for session [%s]\n", p.sessionId)
				})

				stream, err := p.muxClient.session.OpenStream()
				if err != nil {
					continue
				}
				log.Debugf("Client stream opened %d\n", stream.ID())
				go handleDataTransfer(stream, conn)
			}
		}
	}
}