예제 #1
0
    /**
     * Generates an SSL-enabled socket.
     *
     * @return the new socket
     * @throws GeneralSecurityException on error building the socket
     * @throws IOException on error loading the KeyStore
     */
    private SSLSocket getSslSocket(RemoteDevice target)
        throws GeneralSecurityException, IOException {
      // Build a new key store based on the key store manager.
      KeyManager[] keyManagers = coreService.getKeyStoreManager().getKeyManagers();
      TrustManager[] trustManagers = coreService.getKeyStoreManager().getTrustManagers();

      if (keyManagers.length == 0) {
        throw new IllegalStateException("No key managers");
      }

      // Create a new SSLContext, using the new KeyManagers and TrustManagers
      // as the sources of keys and trust decisions, respectively.
      SSLContext sslContext = SSLContext.getInstance("TLS");
      sslContext.init(keyManagers, trustManagers, null);

      // Finally, build a new SSLSocketFactory from the SSLContext, and
      // then generate a new SSLSocket from it.
      SSLSocketFactory factory = sslContext.getSocketFactory();
      SSLSocket sock = (SSLSocket) factory.createSocket();
      sock.setNeedClientAuth(true);
      sock.setUseClientMode(true);
      sock.setKeepAlive(true);
      sock.setTcpNoDelay(true);

      InetSocketAddress fullAddr = new InetSocketAddress(target.getAddress(), target.getPort());
      sock.connect(fullAddr, SOCKET_CREATION_TIMEOUT_MS);
      sock.startHandshake();

      return sock;
    }
예제 #2
0
  /** Loads an existing configuration, and builds the socket to the target. */
  private void loadConfig() {
    SharedPreferences pref = getSharedPreferences(SHARED_PREF_NAME, MODE_PRIVATE);

    RemoteDevice restoredTarget = loadRemoteDevice(pref, "");

    for (int i = 0; i < getResources().getInteger(R.integer.recently_connected_count); ++i) {
      RemoteDevice remoteDevice = loadRemoteDevice(pref, "_" + i);
      if (remoteDevice != null) {
        recentlyConnected.put(remoteDevice.getAddress(), remoteDevice);
      }
    }

    if (restoredTarget != null) {
      setTarget(restoredTarget);
    }
  }
예제 #3
0
 private void addRecentlyConnected(RemoteDevice remoteDevice) {
   recentlyConnected.remove(remoteDevice.getAddress());
   recentlyConnected.put(remoteDevice.getAddress(), remoteDevice);
   storeConfig();
 }
예제 #4
0
 private void storeRemoteDevice(
     SharedPreferences.Editor prefEdit, String suffix, RemoteDevice remoteDevice) {
   prefEdit.putString(DEVICE_NAME_TAG + suffix, remoteDevice.getName());
   prefEdit.putString(DEVICE_IP_TAG + suffix, remoteDevice.getAddress().getHostAddress());
   prefEdit.putInt(DEVICE_PORT_TAG + suffix, remoteDevice.getPort());
 }