コード例 #1
0
  @Override
  public List<URI> selectHttpService() {
    List<ServiceDescriptor> serviceDescriptors =
        Lists.newArrayList(serviceSelector.selectAllServices());
    if (serviceDescriptors.isEmpty()) {
      return ImmutableList.of();
    }

    // favor https over http
    List<URI> httpsUri = Lists.newArrayList();
    for (ServiceDescriptor serviceDescriptor : serviceDescriptors) {
      String https = serviceDescriptor.getProperties().get("https");
      if (https != null) {
        try {
          httpsUri.add(new URI(https));
        } catch (URISyntaxException ignored) {
        }
      }
    }
    List<URI> httpUri = Lists.newArrayList();
    for (ServiceDescriptor serviceDescriptor : serviceDescriptors) {
      String http = serviceDescriptor.getProperties().get("http");
      if (http != null) {
        try {
          httpUri.add(new URI(http));
        } catch (URISyntaxException ignored) {
        }
      }
    }

    // return random(https) + random(http)
    Collections.shuffle(httpsUri);
    Collections.shuffle(httpUri);
    return ImmutableList.<URI>builder().addAll(httpsUri).addAll(httpUri).build();
  }
コード例 #2
0
 void initMandatoryServices(List services) throws ServiceException {
   ServiceDescriptor dsc = startService("jade.core.management.BEAgentManagementService", false);
   dsc.setMandatory(true);
   services.add(dsc);
   dsc = startService("jade.core.messaging.MessagingService", false);
   dsc.setMandatory(true);
   services.add(dsc);
 }
コード例 #3
0
ファイル: ServicesCatalog.java プロジェクト: davidsoloman/S4
 public static ServiceDescriptor getItem(String itemName) {
   ServiceDescriptor item = new ServiceDescriptor();
   switch (itemName) {
     case "TwitIE":
       {
         item.name = "TwitIE";
         item.onlineUrl = "https://text.s4.ontotext.com/v1/twitie";
         return item;
       }
     case "SBT":
       {
         item.name = "SBT";
         item.onlineUrl = "https://text.s4.ontotext.com/v1/sbt";
         return item;
       }
     case "news":
       {
         item.name = "news";
         item.onlineUrl = "https://text.s4.ontotext.com/v1/news";
         return item;
       }
     default:
       {
         throw new UnsupportedOperationException();
       }
   }
 }
コード例 #4
0
 /**
  * Constructor.
  *
  * @param text
  * @param state
  * @param serviceDescriptor
  */
 public BadStateException(String text, ServiceState state, ServiceDescriptor descriptor) {
   super(
       text
           + " (Service= '"
           + (descriptor != null ? descriptor.getKey() : "unknown")
           + ", state= "
           + state
           + ")");
 }
コード例 #5
0
 /** Constructor. */
 public BadStateException(
     ServiceState expectedState, ServiceState state, ServiceDescriptor descriptor) {
   super(
       "Bad state for service '"
           + descriptor.getKey()
           + "'. Expected '"
           + expectedState
           + "' found '"
           + state
           + "'.");
 }
コード例 #6
0
ファイル: Node.java プロジェクト: RodrigoSagach/bitsquare
  public Connection connect(String peer, Collection<ConnectionListener> listeners)
      throws NumberFormatException, IOException {
    if (!serverRunning.get()) {
      throw new IOException("This node has not been started yet!");
    }
    if (peer.equals(descriptor.getFullAddress()))
      throw new IOException(
          "If you find yourself talking to yourself too often, you should really seek help!");
    synchronized (connections) {
      if (connections.containsKey(peer)) throw new IOException("Already connected to " + peer);
    }

    final Socket sock = connectToService(peer);
    return new OutgoingConnection(peer, sock, listeners);
  }
コード例 #7
0
ファイル: Tor.java プロジェクト: happysir/TorProxy
  /**
   * makes a connection to a hidden service
   *
   * @param sp hostname, port to connect to and other stuff
   * @return some socket-thing
   */
  private TCPStream connectToHidden(TCPStreamProperties spo) throws IOException {
    // check, if tor is still in startup-phase
    checkStartup();
    Circuit myRendezvousCirc = null;
    Server hiddenServer;
    Node hiddenNode = null;

    // String address, x, y;
    String z;
    // Iterator it, i, i2;
    byte[] cookie = new byte[20];
    // boolean notFound;
    int j;

    z = (String) Encoding.parseHiddenAddress(spo.hostname).get("z");

    // Do we already have a connection to this address?
    if (hiddenServiceCircuits.containsKey(z)) {
      // TODO assess suitability of this circuit
      System.out.println("Reusing existing circuit");
      TCPStreamProperties tcpProps = new TCPStreamProperties("", spo.port);
      try {
        return new TCPStream(hiddenServiceCircuits.get(z), tcpProps);
      } catch (TorNoAnswerException e) {
        // Create a new circuit instead
        e.printStackTrace();
      } catch (TorException e) {
        // Create a new circuit instead
        e.printStackTrace();
      }
    }

    // get a copy from the service descriptor (either local cache or
    // retrieve form network)
    ServiceDescriptor sd = (ServiceDescriptor) cachedServiceDescriptors.get(z);
    if (sd == null || (!sd.checkTimeStampValidity())) {
      sd = ServiceDescriptor.loadFromDirectory(z, this);
      cachedServiceDescriptors.put(z, sd); // cache it
    }

    boolean establishedRendezvous = false;
    j = 0; // attempts counted
    // spo.connect_retries try to establish rendezvous
    while ((j < spo.connect_retries) && (!establishedRendezvous)) {
      j++;
      try {
        myRendezvousCirc = fnh.provideSuitableNewCircuit(new TCPStreamProperties());
        String rendezvousName =
            myRendezvousCirc.route[myRendezvousCirc.route_established - 1].server.nickname;

        Logger.logGeneral(
            Logger.INFO,
            "Tor.connectToHidden: establishing rendezvous point for "
                + z
                + " at "
                + rendezvousName);
        Random rnd = new Random();
        rnd.nextBytes(cookie);

        myRendezvousCirc.send_cell(new CellRelayEstablishRendezvous(myRendezvousCirc, cookie));
        myRendezvousCirc.streamHistory.add(spo.hostname);

        // wait for answer
        CellRelay rendezvousACK =
            myRendezvousCirc.queue.receiveRelayCell(CellRelay.CELL_RELAY_RENDEZVOUS_ESTABLISHED);
        if (rendezvousACK.length > 0) {
          throw new TorException("Tor.connectToHidden: Got NACK from RENDEZVOUS Point");
        }
        myRendezvousCirc.sd = sd;

        hiddenServer = new Server(this, sd.publicKey);
        hiddenNode = new Node(hiddenServer); // between HS and
        // Rendezvous point

        establishedRendezvous = true;

      } catch (IOException e) {
        e.printStackTrace();
      } catch (TorException e) {
        e.printStackTrace();
      }
    }

    if (!establishedRendezvous) {
      Logger.logGeneral(
          Logger.WARNING, "Tor.connectToHidden: coudn't establishing rendezvous point for " + z);
      throw new IOException("Tor.connectToHidden: coudn't establishing rendezvous point for " + z);
    }

    Iterator<IntroductionPoint> it3 = sd.introPoints.iterator();
    String rendezvousName =
        myRendezvousCirc.route[myRendezvousCirc.route.length - 1].server.nickname;

    while (it3.hasNext()) {
      IntroductionPoint iPoint = (IntroductionPoint) it3.next();
      Logger.logGeneral(
          Logger.INFO,
          "Tor.connectToHidden: contacting introduction point "
              + iPoint.getNickname()
              + " for "
              + z);

      // introduce rendezvous to the node
      TCPStreamProperties spIntro = new TCPStreamProperties();

      spIntro.exitPolicyRequired = false;
      //            Server sr = iPoint.getSrv();
      spIntro.setCustomExitpoint(iPoint.getNickname());

      try {
        // make new circ where the last node is intro point
        Circuit myIntroCirc = new Circuit(this, fnh, dir, spIntro);

        // System.out.println(" LAST NODE IS... " +
        // myIntroCirc.route[myIntroCirc.route.length-1].server.name);

        // and CellIntro1 data encrypted with PK of Hidden Service, and _not_ of the introPoint
        myIntroCirc.send_cell(
            new CellRelayIntroduce1(myIntroCirc, cookie, sd, rendezvousName, hiddenNode));

        // wait for ack
        CellRelay introACK =
            myIntroCirc.queue.receiveRelayCell(CellRelay.CELL_RELAY_COMMAND_INTRODUCE_ACK);
        if (introACK.length > 0)
          throw new TorException("Tor.connectToHidden: Got NACK from Introduction Point");
        // introduce ACK is received
        Logger.logGeneral(Logger.RAW_DATA, "Tor.connectToHidden: Got ACK from Intro Point");

        myIntroCirc.close(true);

        // wait for answer from the hidden service (RENDEZVOUS2)
        int oldTimeout = myRendezvousCirc.queue.timeout;
        if (oldTimeout < 120 * 1000) myRendezvousCirc.queue.timeout = 120 * 1000;
        CellRelay r2Relay =
            myRendezvousCirc.queue.receiveRelayCell(CellRelay.CELL_RELAY_RENDEZVOUS2);
        myRendezvousCirc.queue.timeout = oldTimeout;
        // finish diffie-hellman
        byte[] dh_gy = new byte[148];
        System.arraycopy(r2Relay.data, 0, dh_gy, 0, 148);
        hiddenNode.finish_dh(dh_gy);

        myRendezvousCirc.addNode(hiddenNode);

        Logger.logGeneral(
            Logger.INFO, "Tor.connectToHidden: succesfully established rendezvous with " + z);
        // address in begin cell set to "";
        TCPStreamProperties tcpProps = new TCPStreamProperties("", spo.port);

        if (hiddenServiceCircuits.containsKey(z)) hiddenServiceCircuits.remove(z);
        hiddenServiceCircuits.put(z, myRendezvousCirc);

        // connect
        return new TCPStream(myRendezvousCirc, tcpProps);
      } catch (TorException e) {
        e.printStackTrace();
      } catch (InterruptedException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }

    // all intros failed...
    // perhaps there is something wrong with out cached service descriptor
    cachedServiceDescriptors.remove(z);
    throw new IOException("Tor.connectToHidden: couldn't connect to an introduction point of " + z);
  }
コード例 #8
0
 /**
  * Constructor.
  *
  * @param text
  * @param state
  * @param serviceDescriptor
  */
 public BadStateException(
     String text, ServiceState state, ServiceDescriptor descriptor, Throwable cause) {
   super(text + " (Service= '" + descriptor.getKey() + ", state= " + state + ")", cause);
 }
コード例 #9
0
ファイル: Node.java プロジェクト: RodrigoSagach/bitsquare
 public String getLocalName() {
   return descriptor.getFullAddress();
 }
コード例 #10
0
ファイル: Node.java プロジェクト: RodrigoSagach/bitsquare
 public synchronized Server startListening(ServerConnectListener listener) throws IOException {
   if (serverRunning.getAndSet(true)) throw new IOException("This node is already listening!");
   final Server server = new Server(descriptor.getServerSocket(), listener);
   server.start();
   return server;
 }