Package com.subgraph.orchid

Examples of com.subgraph.orchid.RelayCell


  /* Runs in the context of the connection cell reading thread */
  private void processRelayDataCell(RelayCell cell) {
    if(cell.getRelayCommand() == RelayCell.RELAY_DATA) {
      cell.getCircuitNode().decrementDeliverWindow();
      if(cell.getCircuitNode().considerSendingSendme()) {
        final RelayCell sendme = createRelayCell(RelayCell.RELAY_SENDME, 0, cell.getCircuitNode());
        sendRelayCellTo(sendme, sendme.getCircuitNode());
      }
    }

    synchronized(streamMap) {
      final StreamImpl stream = streamMap.get(cell.getStreamId());
View Full Code Here


    circuit.sendRelayCell(cell);
  }


  public RelayCell receiveRelayResponse(int expectedCommand, Router extendTarget) {
    final RelayCell cell = circuit.receiveRelayCell();
    if(cell == null) {
      throw new TorException("Timeout building circuit");
    }
    final int command = cell.getRelayCommand();
    if(command == RelayCell.RELAY_TRUNCATED) {
      final int code = cell.getByte() & 0xFF;
      final String msg = CellImpl.errorToDescription(code);
      final String source = nodeToName(cell.getCircuitNode());
      if(code == Cell.ERROR_PROTOCOL) {
        logProtocolViolation(source, extendTarget);
      }
      throw new TorException("Error from ("+ source +") while extending to ("+ extendTarget.getNickname() + "): "+ msg);
    } else if(command != expectedCommand) {
View Full Code Here

      return extendWithTunneledExtend(onion);
    }
  }
 
  private CircuitNode extendWithExtend2(byte[] onion) {
    final RelayCell cell = createExtend2Cell(onion);
    extender.sendRelayCell(cell);
    final RelayCell response = extender.receiveRelayResponse(RelayCell.RELAY_EXTENDED2, router);
    return processExtended2(response);
  }
View Full Code Here

    final RelayCell response = extender.receiveRelayResponse(RelayCell.RELAY_EXTENDED2, router);
    return processExtended2(response);
  }
 
  private CircuitNode extendWithTunneledExtend(byte[] onion) {
    final RelayCell cell = createExtendCell(onion, kex.getNtorCreateMagic());
    extender.sendRelayCell(cell);
    final RelayCell response = extender.receiveRelayResponse(RelayCell.RELAY_EXTENDED, router);
    return processExtended(response);
  }
View Full Code Here

  private boolean finalRouterSupportsExtend2() {
    return extender.getFinalRouter().getNTorOnionKey() != null;
  }
 
  private RelayCell createExtend2Cell(byte[] ntorOnionskin) {
    final RelayCell cell = extender.createRelayCell(RelayCell.RELAY_EXTEND2);

    cell.putByte(2);
     
    cell.putByte(0);
    cell.putByte(6);
    cell.putByteArray(router.getAddress().getAddressDataBytes());
    cell.putShort(router.getOnionPort());
     
    cell.putByte(2);
    cell.putByte(20);
    cell.putByteArray(router.getIdentityHash().getRawBytes());
     
    cell.putShort(0x0002);
    cell.putShort(ntorOnionskin.length);
    cell.putByteArray(ntorOnionskin);
    return cell;
  }
View Full Code Here

    cell.putByteArray(ntorOnionskin);
    return cell;
  }
 
  private RelayCell createExtendCell(byte[] ntorOnionskin, byte[] ntorMagic) {
    final RelayCell cell = extender.createRelayCell(RelayCell.RELAY_EXTEND);
    cell.putByteArray(router.getAddress().getAddressDataBytes());
    cell.putShort(router.getOnionPort());
    final int paddingLength = CircuitExtender.TAP_ONIONSKIN_LEN - (ntorOnionskin.length + ntorMagic.length);
    final byte[] padding = new byte[paddingLength];
    cell.putByteArray(ntorMagic);
    cell.putByteArray(ntorOnionskin);
    cell.putByteArray(padding);
    cell.putByteArray(router.getIdentityHash().getRawBytes());
    return cell;
  }
View Full Code Here

    this.kex = new TorTapKeyAgreement(router.getOnionKey());
  }

  public CircuitNode extendTo() {
    logger.fine("Extending to "+ router.getNickname() + " with TAP");
    final RelayCell cell = createRelayExtendCell();
    extender.sendRelayCell(cell);
    final RelayCell response = extender.receiveRelayResponse(RelayCell.RELAY_EXTENDED, router);
    if(response == null) {
      return null;
    }
    return processExtendResponse(response);
  }
View Full Code Here

    }
    return extender.createNewNode(router, keyMaterial, verifyDigest);
  }

  private RelayCell createRelayExtendCell() {
    final RelayCell cell = extender.createRelayCell(RelayCell.RELAY_EXTEND);
    cell.putByteArray(router.getAddress().getAddressDataBytes());
    cell.putShort(router.getOnionPort());
    cell.putByteArray(kex.createOnionSkin());
    cell.putByteArray(router.getIdentityHash().getRawBytes());
    return cell;
  }
View Full Code Here

TOP

Related Classes of com.subgraph.orchid.RelayCell

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.