Throw NotEncryptedError on trying to make a KDM for non-encrypted assets.
authorCarl Hetherington <cth@carlh.net>
Fri, 13 Jun 2014 15:11:51 +0000 (16:11 +0100)
committerCarl Hetherington <cth@carlh.net>
Fri, 13 Jun 2014 15:11:51 +0000 (16:11 +0100)
src/decrypted_kdm.cc
src/exceptions.cc
src/exceptions.h

index 7e9e146d506fc44d15907e7e1a6d31cfbde2409d..3d442ce7e6b362e83942eef1735c0beb43f1c282 100644 (file)
@@ -202,6 +202,9 @@ DecryptedKDM::DecryptedKDM (
                /* XXX: do non-MXF assets need keys? */
                shared_ptr<const MXF> mxf = boost::dynamic_pointer_cast<const MXF> (*i);
                if (mxf) {
+                       if (mxf->key_id().empty ()) {
+                               throw NotEncryptedError (mxf->file().string ());
+                       }
                        _keys.push_back (DecryptedKDMKey (mxf->key_type(), mxf->key_id(), mxf->key().get (), cpl->id ()));
                }
        }
index 28846e1617b0523a43f31b7fcaf0f897ee91f518..b31974d47c3cddb4023684ceb3bb3c72290e33b6 100644 (file)
@@ -28,7 +28,7 @@ using std::string;
 using namespace dcp;
 
 FileError::FileError (string message, boost::filesystem::path filename, int number)
-       : _message (String::compose ("%1 (%2) (error %3)", message, filename.string(), number))
+       : StringError (String::compose ("%1 (%2) (error %3)", message, filename.string(), number))
        , _filename (filename)
        , _number (number)
 {
@@ -36,13 +36,13 @@ FileError::FileError (string message, boost::filesystem::path filename, int numb
 }
 
 UnresolvedRefError::UnresolvedRefError (string id)
-       : _message (String::compose ("Unresolved reference to asset id %1", id))
+       : StringError (String::compose ("Unresolved reference to asset id %1", id))
 {
 
 }
 
 TimeFormatError::TimeFormatError (string bad_time)
-       : _message (String::compose ("Bad time string %1", bad_time))
+       : StringError (String::compose ("Bad time string %1", bad_time))
 {
 
 }
@@ -68,3 +68,9 @@ MissingAssetError::MissingAssetError (boost::filesystem::path path, AssetType ty
        
        _message = String::compose ("Missing asset %1%2", path.string(), type_name);
 }
+
+NotEncryptedError::NotEncryptedError (string const & what)
+       : StringError (String::compose ("%1 is not encrypted", what))
+{
+
+}
index 5d8000d710418db8ebd80ade1de5f70ab0d92244..be87c40bc3f8dd6e42688360d9333be6653f4649 100644 (file)
 namespace dcp
 {
 
+class StringError : public std::exception
+{
+public:
+       StringError () {}
+       StringError (std::string message)
+               : _message (message)
+       {}
+                           
+       ~StringError () throw () {}
+
+       /** @return error message */
+       char const * what () const throw () {
+               return _message.c_str ();
+       }
+
+protected:
+       std::string _message;
+};
+
 /** @class FileError
  *  @brief An exception related to a file
  */
-class FileError : public std::exception
+class FileError : public StringError
 {
 public:
        FileError (std::string message, boost::filesystem::path filename, int number);
        ~FileError () throw () {}
 
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-       
        /** @return filename of file that was involved */
        boost::filesystem::path filename () const {
                return _filename;
@@ -54,8 +68,6 @@ public:
        }
 
 private:
-       /** message part */
-       std::string _message;
        /** filename of file that was involved */
        boost::filesystem::path _filename;
        int _number;
@@ -75,41 +87,26 @@ public:
 /** @class MiscError
  *  @brief A miscellaneous exception
  */
-class MiscError : public std::exception
+class MiscError : public StringError
 {
 public:
-       MiscError (std::string message) : _message (message) {}
-       ~MiscError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       /** error message */
-       std::string _message;
+       MiscError (std::string message)
+               : StringError (message)
+       {}
 };
 
 /** @class DCPReadError
  *  @brief A DCP read exception
  */
-class DCPReadError : public std::exception
+class DCPReadError : public StringError
 {
 public:
-       DCPReadError (std::string message) : _message (message) {}
-       ~DCPReadError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
+       DCPReadError (std::string message)
+               : StringError (message)
+       {}
 
 protected:
        DCPReadError () {}
-       
-       /** error message */
-       std::string _message;
 };
 
 /** @class MissingAssetError
@@ -136,58 +133,39 @@ private:
 /** @class XMLError
  *  @brief An XML error
  */
-class XMLError : public std::exception
+class XMLError : public StringError
 {
 public:
-       XMLError (std::string message) : _message (message) {}
-       ~XMLError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       /** error message */
-       std::string _message;
+       XMLError (std::string message)
+               : StringError (message)
+       {}
 };
 
 /** @class UnresolvedRefError
  *  @brief An exception caused by a reference (by UUID) to something which is not known
  */
-class UnresolvedRefError : public std::exception
+class UnresolvedRefError : public StringError
 {
 public:
        UnresolvedRefError (std::string id);
-       ~UnresolvedRefError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       std::string _message;
 };
 
 /** @class TimeFormatError
  *  @brief A an error with a string passed to LocalTime.
  */
-class TimeFormatError : public std::exception
+class TimeFormatError : public StringError
 {
 public:
        TimeFormatError (std::string bad_time);
-       ~TimeFormatError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       std::string _message;
 };
 
+class NotEncryptedError : public StringError
+{
+public:
+       NotEncryptedError (std::string const & asset_filename);
+       ~NotEncryptedError () throw () {}
+};
+       
 }
 
 #endif