handleRemoteOpenedStream method

void handleRemoteOpenedStream(
  1. UDXPacket packet,
  2. Uint8List rawData,
  3. InternetAddress remoteAddress,
  4. int remotePort,
)

Implementation

void handleRemoteOpenedStream(UDXPacket packet, Uint8List rawData, InternetAddress remoteAddress, int remotePort) {
  _logger.fine('[UDXSessionConn $id] handleRemoteOpenedStream called by UDXListener. Packet for destId: ${packet.destinationStreamId}, srcId: ${packet.sourceStreamId}');
  if (_isClosed) {
    _logger.fine('[UDXSessionConn $id] Session closed, ignoring handleRemoteOpenedStream.');
    return;
  }
  try {
    final localId = packet.destinationStreamId;
    final remoteId = packet.sourceStreamId;

    _logger.fine('[UDXSessionConn $id] Creating incoming UDXStream for remote-opened stream. LocalId: $localId, RemoteId: $remoteId');
    final newRemoteStream = UDXStream.createIncoming(
      _transport._udxInstance,
      _udpSocket,
      localId,
      remoteId,
      remoteAddress.address,
      remotePort,
      destinationCid: packet.destinationCid,
      sourceCid: packet.sourceCid,
    );
    _logger.fine('[UDXSessionConn $id] Incoming UDXStream created: ${newRemoteStream.id}');

    newRemoteStream.internalHandleSocketEvent({
      'data': rawData,
      'address': remoteAddress.address,
      'port': remotePort,
    });
    _logger.fine('[UDXSessionConn $id] Handled socket event for new incoming UDXStream ${newRemoteStream.id}');

    final adapter = UDXP2PStreamAdapter(
      udxStream: newRemoteStream,
      parentConn: this,
      direction: Direction.inbound,
    );
    _activeStreams[newRemoteStream.id] = adapter;
    _logger.fine('[UDXSessionConn $id] Adapted new incoming UDXStream ${newRemoteStream.id} and added to active streams.');
    if (!_incomingStreamsController.isClosed) {
      _incomingStreamsController.add(adapter);
      _logger.fine('[UDXSessionConn $id] Added new stream adapter ${adapter.id()} to incoming streams controller.');
    } else {
      _logger.fine('[UDXSessionConn $id] (Listener-Side): Incoming stream controller closed, closing new remote stream ${newRemoteStream.id}');
      adapter.close();
      _activeStreams.remove(newRemoteStream.id);
    }
  } catch (e, s) {
    _logger.fine('[UDXSessionConn $id] (Listener-Side): Error handling remote opened stream: $e\n$s');
  }
}