bool Configuration::LookupDicomModalityUsingAETitle(RemoteModalityParameters& modality,
                                                      const std::string& aet)
  {
    std::set<std::string> modalities;
    GetListOfDicomModalities(modalities);

    for (std::set<std::string>::const_iterator 
           it = modalities.begin(); it != modalities.end(); ++it)
    {
      try
      {
        GetDicomModalityUsingSymbolicName(modality, *it);

        if (IsSameAETitle(aet, modality.GetApplicationEntityTitle()))
        {
          return true;
        }
      }
      catch (OrthancException&)
      {
      }
    }

    return false;
  }
 ReusableDicomUserConnection::Locker::Locker(ReusableDicomUserConnection& that,
                                             const RemoteModalityParameters& remote) :
   ::Orthanc::Locker(that)
 {
   that.Open(remote.GetApplicationEntityTitle(), remote.GetHost(), 
             remote.GetPort(), remote.GetManufacturer());
   connection_ = that.connection_;    
 }
  void ReusableDicomUserConnection::Open(const std::string& localAet,
                                         const RemoteModalityParameters& remote)
  {
    if (connection_ != NULL &&
        connection_->GetLocalApplicationEntityTitle() == localAet &&
        connection_->GetRemoteApplicationEntityTitle() == remote.GetApplicationEntityTitle() &&
        connection_->GetRemoteHost() == remote.GetHost() &&
        connection_->GetRemotePort() == remote.GetPort() &&
        connection_->GetRemoteManufacturer() == remote.GetManufacturer())
    {
      // The current connection can be reused
      LOG(INFO) << "Reusing the previous SCU connection";
      return;
    }

    Close();

    connection_ = new DicomUserConnection();
    connection_->SetLocalApplicationEntityTitle(localAet);
    connection_->SetRemoteModality(remote);
    connection_->Open();
  }