diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-01-10 21:05:54 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-01-10 21:05:54 +0000 |
| commit | 1ee5cc88cb32927f95358e2d03985caf5a1d8e05 (patch) | |
| tree | dd7a17fbcae7179d79249d5bde08319d6159cf7f /src/package_base.cc | |
| parent | 0ffc4c35a9ae232f3bed9329997c043c42372f6f (diff) | |
Move some more stuff up to Package.
Diffstat (limited to 'src/package_base.cc')
| -rw-r--r-- | src/package_base.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/package_base.cc b/src/package_base.cc index aa4658d2..81200ee7 100644 --- a/src/package_base.cc +++ b/src/package_base.cc @@ -24,6 +24,7 @@ #include "dcp_assert.h" #include "font_asset.h" #include "raw_convert.h" +#include "certificate_chain.h" #include <libcxml/cxml.h> #include <libxml++/libxml++.h> #include <boost/foreach.hpp> @@ -223,3 +224,42 @@ PackageBase::write_assetmap (Standard standard, string pkl_uuid, int pkl_length, /* This must not be the _formatted version otherwise signature digests will be wrong */ doc.write_to_file (p.string (), "UTF-8"); } + +boost::filesystem::path +PackageBase::write_pkl (dcp::Standard standard, string pkl_uuid, dcp::XMLMetadata metadata, shared_ptr<const CertificateChain> signer) const +{ + boost::filesystem::path p = _directory; + p /= String::compose ("pkl_%1.xml", pkl_uuid); + + xmlpp::Document doc; + xmlpp::Element* pkl; + if (standard == DCP_INTEROP) { + pkl = doc.create_root_node("PackingList", "http://www.digicine.com/PROTO-ASDCP-PKL-20040311#"); + } else { + pkl = doc.create_root_node("PackingList", "http://www.smpte-ra.org/schemas/429-8/2007/PKL"); + } + + if (signer) { + pkl->set_namespace_declaration ("http://www.w3.org/2000/09/xmldsig#", "dsig"); + } + + pkl->add_child("Id")->add_child_text ("urn:uuid:" + pkl_uuid); + + pkl->add_child("AnnotationText")->add_child_text (pkl_annotation_text ()); + + pkl->add_child("IssueDate")->add_child_text (metadata.issue_date); + pkl->add_child("Issuer")->add_child_text (metadata.issuer); + pkl->add_child("Creator")->add_child_text (metadata.creator); + + xmlpp::Element* asset_list = pkl->add_child("AssetList"); + BOOST_FOREACH (shared_ptr<dcp::Asset> i, assets ()) { + i->write_to_pkl (asset_list, _directory, standard); + } + + if (signer) { + signer->sign (pkl, standard); + } + + doc.write_to_file (p.string (), "UTF-8"); + return p.string (); +} |
