Clean up SSH server subsystem handling
[netconf.git] / transport / transport-ssh / src / main / java / org / opendaylight / netconf / transport / ssh / TransportChannelSession.java
1 /*
2  * Copyright (c) 2023 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.netconf.transport.ssh;
9
10 import static java.util.Objects.requireNonNull;
11
12 import java.io.IOException;
13 import org.opendaylight.netconf.shaded.sshd.common.channel.RequestHandler;
14 import org.opendaylight.netconf.shaded.sshd.server.channel.ChannelSession;
15
16 /**
17  * Our own version of {@link ChannelSession}, bound to a backend Netty channel.
18  */
19 final class TransportChannelSession extends ChannelSession {
20     private final TransportServerSession serverSession;
21
22     TransportChannelSession(final TransportServerSession serverSession) {
23         this.serverSession = requireNonNull(serverSession);
24     }
25
26     @Override
27     protected RequestHandler.Result handleSubsystemParsed(final String request, final String subsystem)
28             throws IOException {
29         final var openSubsystem = serverSession.openSubsystem(subsystem);
30         if (openSubsystem == null) {
31             log.warn("handleSubsystemParsed({}) Unsupported subsystem: {}", this, subsystem);
32             return RequestHandler.Result.ReplyFailure;
33         }
34
35         commandInstance = openSubsystem;
36         return prepareChannelCommand(request, commandInstance);
37     }
38 }