static FLMRequiredExtensionsType BuildFlmRequiredExtention(X509Certificate2 x509Certificate2) { FLMRequiredExtensionsType flmRequiredExtention = new FLMRequiredExtensionsType(); flmRequiredExtention.FacilityInfo = new FLMRequiredExtensionsTypeFacilityInfo(); flmRequiredExtention.FacilityInfo.AnnotationText = new UserTextType(); flmRequiredExtention.FacilityInfo.AnnotationText.language = "en-us"; flmRequiredExtention.FacilityInfo.AnnotationText.Value = "Example Facility List Message"; flmRequiredExtention.FacilityInfo.FacilityName = new UserTextType(); flmRequiredExtention.FacilityInfo.FacilityName.Value = "urn:x-facilityID:dcipllc.com:000000"; flmRequiredExtention.FacilityInfo.UTCOffset = new UTCOffsetType(); flmRequiredExtention.FacilityInfo.UTCOffset.Offset = "-05:00"; flmRequiredExtention.SecurityDeviceList = new SecurityDeviceListType(); CombinedType securityDevice = new CombinedType(); securityDevice.KeyInfo = new KeyInfoType(); securityDevice.KeyInfo.ItemsElementName = new ItemsChoiceType3[2]; securityDevice.KeyInfo.ItemsElementName[0] = ItemsChoiceType3.KeyName; securityDevice.KeyInfo.ItemsElementName[1] = ItemsChoiceType3.X509Data; securityDevice.KeyInfo.Items = new object[2]; securityDevice.KeyInfo.Items[0] = x509Certificate2.IssuerName.Name; X509DataType x509Data = new X509DataType(); x509Data.ItemsElementName = new ItemsChoiceType1[1]; x509Data.ItemsElementName[0] = ItemsChoiceType1.X509Certificate; x509Data.Items = new object[1]; x509Data.Items[0] = x509Certificate2.RawData; securityDevice.KeyInfo.Items[1] = x509Data; securityDevice.DeviceDescription = new deviceDescriptionType(); securityDevice.DeviceDescription.DeviceIdentifier = new deviceIdentifierPolyType(); securityDevice.DeviceDescription.DeviceIdentifier.idtype = new deviceIdentifierPolyTypeIdtype(); securityDevice.DeviceDescription.DeviceIdentifier.idtype = deviceIdentifierPolyTypeIdtype.DeviceUID; securityDevice.DeviceDescription.DeviceIdentifier.Value = "urn:uid:" + Guid.Empty; securityDevice.DeviceDescription.DeviceTypeID = new deviceTypeType(); securityDevice.DeviceDescription.DeviceTypeID.scope = "http://www.dcipllc.com/schemas/430-7/2009/FLM#deviceTypes"; securityDevice.DeviceDescription.DeviceTypeID.Value = "SMS"; securityDevice.DeviceDescription.DeviceSerial = "000000"; securityDevice.DeviceDescription.ManufacturerName = "Doremi"; securityDevice.DeviceDescription.ModelNumber = "DCP0000"; securityDevice.DeviceDescription.DeviceComment = new UserTextType(); securityDevice.DeviceDescription.DeviceComment.Value = "Not a Real Device"; flmRequiredExtention.SecurityDeviceList.Items = new CertOnlyType[1]; flmRequiredExtention.SecurityDeviceList.Items[0] = securityDevice; return(flmRequiredExtention); }
static void Main(string[] args) { //X509Certificate2 x509Certificate2 = GetCertificate("990B25F50DC7E2B548BE75AFED579448", StoreLocation.CurrentUser); //X509Certificate2 x509Certificate2 = GetCertificate("23B0B092F414B89745B443F2B3700039", StoreLocation.LocalMachine); //X509Certificate2 x509Certificate2 = GetCertificate("0efb7eebdcda4f64a718db3ff908b085", StoreLocation.LocalMachine); X509Certificate2 x509Certificate2 = GetCertificate("0EFB7EEBDCDA4F64A718DB3FF908B085", StoreLocation.CurrentUser); // *.dcipllc.com DCinemaSecurityMessageType extraTheatreMessage = BuildDCinemaSecurityMessage(x509Certificate2); TextWriter WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\ExtraTheatreMessage.xml"); XmlSerializer xmlSerializer = new XmlSerializer(typeof(DCinemaSecurityMessageType)); xmlSerializer.Serialize(WriteFileStream, extraTheatreMessage); WriteFileStream.Close(); FLMRequiredExtensionsType flmRequiredExtention = BuildFlmRequiredExtention(x509Certificate2); WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\FacilityListMessageRequiredExtention.xml"); xmlSerializer = new XmlSerializer(typeof(FLMRequiredExtensionsType)); xmlSerializer.Serialize(WriteFileStream, flmRequiredExtention); WriteFileStream.Close(); AppendFLMRequiredExtension(extraTheatreMessage, flmRequiredExtention); WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\FaciltyListMessage.xml"); xmlSerializer = new XmlSerializer(typeof(DCinemaSecurityMessageType)); xmlSerializer.Serialize(WriteFileStream, extraTheatreMessage); WriteFileStream.Close(); SignETM(extraTheatreMessage, x509Certificate2); WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\FaciltyListMessage_Signed.xml"); xmlSerializer = new XmlSerializer(typeof(DCinemaSecurityMessageType)); xmlSerializer.Serialize(WriteFileStream, extraTheatreMessage); WriteFileStream.Close(); ServiceFacilityListMessageClient client = new ServiceFacilityListMessageClient(); System.Console.WriteLine("Sending FLM: " + extraTheatreMessage.AuthenticatedPublic.MessageId); string result = client.FLM(extraTheatreMessage); System.Console.WriteLine(result); }
static DCinemaSecurityMessageType AppendFLMRequiredExtension(DCinemaSecurityMessageType extraTheatreMessage, FLMRequiredExtensionsType flmRequiredExtention) { DCinemaSecurityMessageType facilityListMessage = extraTheatreMessage; StringWriter stringWriter = new StringWriter(); XmlSerializer xmlSerializer = new XmlSerializer(typeof(FLMRequiredExtensionsType)); xmlSerializer.Serialize(stringWriter, flmRequiredExtention); string serializedXML = stringWriter.ToString(); XmlDocument docFlmRequiredExtention = new XmlDocument(); docFlmRequiredExtention.LoadXml(serializedXML); facilityListMessage.AuthenticatedPublic.RequiredExtensions = docFlmRequiredExtention.DocumentElement; extraTheatreMessage.AuthenticatedPublic.MessageType = "http://www.smpte-ra.org/schemas/430-7/2008/FLM"; extraTheatreMessage.AuthenticatedPublic.AnnotationText.Value = "Test Facility List Message"; return(facilityListMessage); }