connect method

*[<Null safety>](https://dart.dev/null-safety)*
  • @override

int connect (dynamic flags, int mode, InterfaceRequest request, [dynamic parentFlags])

override

Implementation

@override
int connect(OpenFlags flags, int mode, fidl.InterfaceRequest<Node> request,
    [OpenFlags? parentFlags]) {
  if (_isClosed) {
    sendErrorEvent(flags, ZX.ERR_NOT_SUPPORTED, request);
    return ZX.ERR_NOT_SUPPORTED;
  }
  // There should be no modeType* flags set, except for, possibly,
  // modeTypeDirectory when the target is a pseudo dir.
  if ((mode & ~modeProtectionMask) & ~modeTypeDirectory != 0) {
    sendErrorEvent(flags, ZX.ERR_INVALID_ARGS, request);
    return ZX.ERR_INVALID_ARGS;
  }

  var connectFlags = filterForNodeReference(flags);

  // Explicitly expand OpenFlags.posixDeprecated into new equivalent flags.
  // TODO(fxbug.dev/81185): Remove entire branch when flag is removed from fuchsia.io.
  if ((connectFlags & OpenFlags.posixDeprecated) != OpenFlags.$none) {
    connectFlags |= OpenFlags.posixWritable | OpenFlags.posixExecutable;
    connectFlags &= ~OpenFlags.posixDeprecated;
  }

  parentFlags ??= Flags.fsRightsDefault();
  // Grant POSIX clients additional rights.
  if (Flags.isPosixWritable(connectFlags)) {
    connectFlags |= parentFlags & OpenFlags.rightWritable;
  }
  if (Flags.isPosixExecutable(connectFlags)) {
    connectFlags |= parentFlags & OpenFlags.rightExecutable;
  }
  // Clear any remaining POSIX right expansion flags.
  connectFlags &= ~(OpenFlags.posixWritable | OpenFlags.posixExecutable);

  final status = _validateFlags(connectFlags);
  if (status != ZX.OK) {
    sendErrorEvent(connectFlags, status, request);
    return status;
  }
  final connection = _DirConnection(
      mode, connectFlags, this, fidl.InterfaceRequest(request.passChannel()));
  _connections.add(connection);
  return ZX.OK;
}