sendGlobalRequestWithReply method

  1. @override
Future<SshGlobalRequestReply> sendGlobalRequestWithReply(
  1. SshGlobalRequest request
)
override

Implementation

@override
Future<SshGlobalRequestReply> sendGlobalRequestWithReply(
  SshGlobalRequest request,
) async {
  _ensureConnected();
  final List<int> requestData = _resolveGlobalRequestData(request);

  if (!request.wantReply) {
    await _writeApplicationPacket(
      SshGlobalRequestMessage(
        requestName: request.type,
        wantReply: false,
        requestData: requestData,
      ).encodePayload(),
    );
    return SshGlobalRequestReply.success();
  }

  final Completer<SshGlobalRequestReply> replyCompleter =
      Completer<SshGlobalRequestReply>();
  _pendingGlobalRequestReplies.add(replyCompleter);
  try {
    await _writeApplicationPacket(
      SshGlobalRequestMessage(
        requestName: request.type,
        wantReply: true,
        requestData: requestData,
      ).encodePayload(),
    );
    return await replyCompleter.future;
  } catch (error, stackTrace) {
    _pendingGlobalRequestReplies.remove(replyCompleter);
    if (!replyCompleter.isCompleted) {
      replyCompleter.completeError(error, stackTrace);
    }
    rethrow;
  }
}