code: public PqAuth doAuth(ConnectionInfo[] infos) {
          TransportRate rate = new TransportRate(infos);
          for (int i = 0; i < AUTH_ATTEMPT_COUNT; i++) {
              ConnectionType connectionType = rate.tryConnection();
              try {
                  context = new PlainTcpConnection(connectionType.getHost(), connectionType.getPort());
                  rate.onConnectionSuccess(connectionType.getId());
              } catch (IOException e) {
                  Logger.e(TAG, e);
                  rate.onConnectionFailure(connectionType.getId());
                  continue;
              }
  
              try {
                  return authAttempt();
              } catch (IOException e) {
                  Logger.e(TAG, e);
              } finally {
                  if (context != null) {
                      context.destroy();
                      context = null;
                  }
              }
  
              try {
                  Thread.sleep(300);
              } catch (InterruptedException e) {
                  return null;
              }
          }
          return null;
      }
docs: Perform auth
  
  @param infos connection information
  @return auth