MCPcopy
hub / github.com/ContainerSSH/ContainerSSH / handleConnection

Method handleConnection

internal/sshserver/serverImpl.go:508–642  ·  view source on GitHub ↗
(conn net.Conn)

Source from the content-addressed store, hash-verified

506}
507
508func (s *serverImpl) handleConnection(conn net.Conn) {
509 addr := conn.RemoteAddr().(*net.TCPAddr)
510 connectionID := GenerateConnectionID()
511 logger := s.logger.
512 WithLabel("remoteAddr", addr.IP.String()).
513 WithLabel("connectionId", connectionID)
514 connectionMeta := metadata.ConnectionMetadata{
515 RemoteAddress: metadata.RemoteAddress(*addr),
516 ConnectionID: connectionID,
517 Metadata: map[string]metadata.Value{},
518 Environment: map[string]metadata.Value{},
519 Files: map[string]metadata.BinaryValue{},
520 }
521
522 handlerNetworkConnection, connectionMeta, err := s.handler.OnNetworkConnection(connectionMeta)
523 if err != nil {
524 logger.Info(err)
525 _ = conn.Close()
526 s.wg.Done()
527 return
528 }
529 shutdownHandlerID := fmt.Sprintf("network-%s", connectionID)
530 s.shutdownHandlers.Register(shutdownHandlerID, handlerNetworkConnection)
531
532 logger.Debug(
533 messageCodes.NewMessage(
534 messageCodes.MSSHConnected, "Client connected",
535 ),
536 )
537
538 // HACK: check HACKS.md "OnHandshakeSuccess conformanceTestHandler"
539 wrapper := networkConnectionWrapper{
540 NetworkConnectionHandler: handlerNetworkConnection,
541 }
542
543 sshConn, channels, globalRequests, err := ssh.NewServerConn(
544 conn,
545 s.createConfiguration(connectionMeta, &wrapper, logger),
546 )
547 abortCleanup := func() {
548 logger.Info(messageCodes.Wrap(err, messageCodes.ESSHHandshakeFailed, "SSH handshake failed"))
549 handlerNetworkConnection.OnHandshakeFailed(connectionMeta, err)
550 s.shutdownHandlers.Unregister(shutdownHandlerID)
551 logger.Debug(messageCodes.NewMessage(messageCodes.MSSHDisconnected, "Client disconnected"))
552 handlerNetworkConnection.OnDisconnect()
553 _ = conn.Close()
554 s.wg.Done()
555 }
556 if err != nil {
557 abortCleanup()
558 return
559 }
560 var authenticatedMetadata metadata.ConnectionAuthenticatedMetadata
561 marshaledMetadata, ok := sshConn.Permissions.Extensions["containerssh-metadata"]
562 if !ok {
563 abortCleanup()
564 return
565 }

Callers 1

RunWithLifecycleMethod · 0.95

Calls 15

createConfigurationMethod · 0.95
handleChannelsMethod · 0.95
handleGlobalRequestsMethod · 0.95
RemoteAddressTypeAlias · 0.92
GenerateConnectionIDFunction · 0.85
RegisterMethod · 0.80
UnregisterMethod · 0.80
UnmarshalMethod · 0.80
WithLabelMethod · 0.65
StringMethod · 0.65
OnNetworkConnectionMethod · 0.65
InfoMethod · 0.65

Tested by

no test coverage detected