summaryrefslogtreecommitdiff
path: root/src/package_base.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-01-10 21:05:54 +0000
committerCarl Hetherington <cth@carlh.net>2016-01-10 21:05:54 +0000
commit1ee5cc88cb32927f95358e2d03985caf5a1d8e05 (patch)
treedd7a17fbcae7179d79249d5bde08319d6159cf7f /src/package_base.cc
parent0ffc4c35a9ae232f3bed9329997c043c42372f6f (diff)
Move some more stuff up to Package.
Diffstat (limited to 'src/package_base.cc')
-rw-r--r--src/package_base.cc40
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 ();
+}