- using namespace boost::filesystem;
- for (directory_iterator i = directory_iterator(*kdm_dir); i != directory_iterator(); ++i) {
- if (file_size(i->path()) < MAX_KDM_SIZE) {
- try {
- dcp::EncryptedKDM kdm(dcp::file_to_string(i->path()));
- if (kdm.cpl_id() == dcp->cpl()) {
- dcp->add_kdm (kdm);
- dcp->examine (shared_ptr<Job>());
+
+ optional<dcp::EncryptedKDM> kdm;
+
+ ScopedTemporary temp;
+ string url = Config::instance()->kdm_server_url();
+ boost::algorithm::replace_all (url, "{CPL}", "%1");
+ if (dcp->cpl() && !get_from_url(String::compose(url, *dcp->cpl()), false, temp)) {
+ try {
+ kdm = dcp::EncryptedKDM (dcp::file_to_string(temp.file()));
+ if (kdm->cpl_id() != dcp->cpl()) {
+ kdm = boost::none;
+ }
+ } catch (std::exception& e) {
+ /* Hey well */
+ }
+ }
+
+ if (!kdm) {
+ using namespace boost::filesystem;
+ for (directory_iterator i = directory_iterator(*kdm_dir); i != directory_iterator(); ++i) {
+ if (file_size(i->path()) < MAX_KDM_SIZE) {
+ try {
+ kdm = dcp::EncryptedKDM(dcp::file_to_string(i->path()));
+ if (kdm->cpl_id() == dcp->cpl()) {
+ break;
+ }
+ } catch (std::exception& e) {
+ /* Hey well */