( channelMetadata metadata.ChannelMetadata, newChannel ssh.NewChannel, connection SSHConnectionHandler, logger log.Logger, )
| 821 | } |
| 822 | |
| 823 | func (s *serverImpl) handleSessionChannel( |
| 824 | channelMetadata metadata.ChannelMetadata, |
| 825 | newChannel ssh.NewChannel, |
| 826 | connection SSHConnectionHandler, |
| 827 | logger log.Logger, |
| 828 | ) { |
| 829 | channelCallbacks := &channelWrapper{ |
| 830 | logger: logger, |
| 831 | lock: &sync.Mutex{}, |
| 832 | } |
| 833 | handlerChannel, rejection := connection.OnSessionChannel(channelMetadata, newChannel.ExtraData(), channelCallbacks) |
| 834 | if rejection != nil { |
| 835 | logger.Debug( |
| 836 | messageCodes.Wrap( |
| 837 | rejection, |
| 838 | messageCodes.MSSHNewChannelRejected, |
| 839 | "New SSH channel rejected", |
| 840 | ).Label("type", newChannel.ChannelType()), |
| 841 | ) |
| 842 | |
| 843 | if err := newChannel.Reject(rejection.Reason(), rejection.UserMessage()); err != nil { |
| 844 | logger.Debug(messageCodes.Wrap(err, messageCodes.ESSHReplyFailed, "Failed to send reply to channel request")) |
| 845 | } |
| 846 | return |
| 847 | } |
| 848 | shutdownHandlerID := fmt.Sprintf( |
| 849 | "session-%s-%d", |
| 850 | channelMetadata.Connection.ConnectionID, |
| 851 | channelMetadata.ChannelID, |
| 852 | ) |
| 853 | s.shutdownHandlers.Register(shutdownHandlerID, handlerChannel) |
| 854 | channel, requests, err := newChannel.Accept() |
| 855 | if err != nil { |
| 856 | logger.Debug(messageCodes.Wrap(err, messageCodes.ESSHReplyFailed, "failed to accept session channel")) |
| 857 | s.shutdownHandlers.Unregister(shutdownHandlerID) |
| 858 | return |
| 859 | } |
| 860 | logger.Debug(messageCodes.NewMessage(messageCodes.MSSHNewChannel, "New SSH channel").Label("type", newChannel.ChannelType())) |
| 861 | channelCallbacks.channel = channel |
| 862 | nextRequestID := uint64(0) |
| 863 | for { |
| 864 | request, ok := <-requests |
| 865 | if !ok { |
| 866 | s.shutdownHandlers.Unregister(shutdownHandlerID) |
| 867 | channelCallbacks.onClose() |
| 868 | handlerChannel.OnClose() |
| 869 | break |
| 870 | } |
| 871 | requestID := nextRequestID |
| 872 | nextRequestID++ |
| 873 | s.handleChannelRequest(channelMetadata, requestID, request, handlerChannel, logger) |
| 874 | } |
| 875 | } |
| 876 | |
| 877 | func serveConnection(log log.Logger, dst io.WriteCloser, src io.ReadCloser) { |
| 878 | _, err := io.Copy(dst, src) |
no test coverage detected