class Transports {

    private final ClusterService clusterService;
    private final TransportService transportService;

    @Inject
    public Transports(ClusterService clusterService, TransportService transportService) {
        this.clusterService = clusterService;
        this.transportService = transportService;
    }

    public <TRequest extends TransportRequest, TResponse extends TransportResponse> void sendRequest(
        String action,
        String node,
        TRequest request,
        ActionListener<TResponse> listener,
        TransportResponseHandler<TResponse> handler,
        TransportRequestOptions options) {<FILL_FUNCTION_BODY>}

    public <TRequest extends TransportRequest, TResponse extends TransportResponse> void sendRequest(
        String action,
        String node,
        TRequest request,
        ActionListener<TResponse> listener,
        TransportResponseHandler<TResponse> handler) {
        sendRequest(action, node, request, listener, handler, TransportRequestOptions.EMPTY);
    }
}


        DiscoveryNode discoveryNode = clusterService.state().nodes().get(node);
        if (discoveryNode == null) {
            listener.onFailure(new NodeNotConnectedException(null,
                String.format(Locale.ENGLISH, "node \"%s\" not found in cluster state!", node)));
            return;
        }
        try {
            transportService.sendRequest(discoveryNode, action, request, options, handler);
        } catch (Throwable t) {
            listener.onFailure(Exceptions.toException(t));
        }
    
<no_super_class>