in src/sessionmanagerplugin/session/portsession/muxportforwarding.go [221:276]
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)
}
}
}
}