private IReadOnlyCollection <PackageInfo> DecodePackages(IEnumerable <PackageResponseType> packageResponses) { if (packageResponses == null) { return(null); } var dataTransformsHelper = new ExtraDataTransformHandler(new[] { _compressionHandler }, new[] { _encryptionHandler }); return(packageResponses.Select(x => new PackageInfo(x, dataTransformsHelper, this)).ToList()); }
internal PackageInfo(PackageResponseType package, ExtraDataTransformHandler dataTransformHandler, RequestClient client) { _client = client; Flags = package.PackageHeader.GetFlags().ToList(); ResponseTimestamp = package.PackageHeader.ResponseDetails.TimeStamp; ResponseId = package.PackageHeader.ResponseDetails.ResponseID.Value; if (!IsError) { var encoding = ExtraEncodingFactory.Dsrv.GetEncoding("I1"); var data = ((Base64CharSequenceType)((DataType1)package.PackageBody.Items[0]).Item).Value; foreach (var plugin in package.PackagePlugIns.Any) { switch (plugin) { case DataSourceType dataSource: FileName = dataSource.DataContainer.name; if (dataSource.DataContainer.createdSpecified) { FileCreated = dataSource.DataContainer.created; } if (!string.IsNullOrEmpty(dataSource.DataContainer.encoding)) { encoding = ExtraEncodingFactory.Dsrv.GetEncoding(dataSource.DataContainer.encoding); } break; case DataTransformsType dataTransforms: data = dataTransformHandler.ReverseTransform(data, dataTransforms); break; default: throw new NotSupportedException(); } } File = encoding.GetString(data, 0, data.Length); FileData = data; } }
private XDocument CreateDelivery(string requestId, DateTime requestTimestamp, int fileNumber, string data) { var encodingId = "I1"; var encoding = ExtraEncodingFactory.Dsrv.GetEncoding(encodingId); var requestData = encoding.GetBytes(data); var dataName = $"{(_isTest ? 'T' : 'E')}DSV0{fileNumber:D6}"; var dataTransformsHelper = new ExtraDataTransformHandler(new[] { _compressionHandler }, new[] { _encryptionHandler }); var transformResult = dataTransformsHelper.Transform(requestData, dataName, requestTimestamp, _compressionHandler.AlgorithmId, _encryptionHandler.AlgorithmId); var requestDataEncrypted = transformResult.Item1; var extra = new TransportRequestType() { version = SupportedVersionsType.Item14, profile = "http://www.extra-standard.de/profile/DEUEV/2.0", TransportHeader = new TransportRequestHeaderType() { Sender = new SenderType() { SenderID = new ClassifiableIDType() { Value = _sender.Betriebsnummer }, }, Receiver = new ReceiverType() { ReceiverID = new ClassifiableIDType() { Value = DsrvConstants.Betriebsnummer }, }, RequestDetails = new RequestDetailsType() { RequestID = new ClassifiableIDType() { Value = requestId, }, TimeStamp = requestTimestamp.ToUniversalTime(), TimeStampSpecified = true, Application = new ApplicationType() { Manufacturer = "DATALINE GmbH & Co. KG", Product = new TextType() { Value = "DATALINE Lohnabzug" }, }, Procedure = DsrvConstants.ProcedureSend, DataType = ExtraDataType.VSNRAnfrage, Scenario = ExtraScenario.RequestWithAcknowledgement, }, }, TransportPlugIns = new AnyPlugInContainerType() { Any = new object[] { new DataTransformsType() { version = DataTransformsTypeVersion.Item12, versionSpecified = true, Compression = transformResult.Item2.OfType <CompressionType>().ToArray(), Encryption = transformResult.Item2.OfType <EncryptionType>().ToArray(), }, new DataSourceType() { version = DataSourceTypeVersion.Item10, versionSpecified = true, DataContainer = new DataContainerType() { type = ExtraContainerType.File, created = requestTimestamp.ToUniversalTime(), createdSpecified = true, encoding = encodingId, name = dataName, }, }, new ContactsType() { version = ContactsTypeVersion.Item10, versionSpecified = true, SenderContact = new[] { new ContactType() { Endpoint = new[] { new EndpointType() { type = EndpointTypeType.SMTP, Value = _sender.Email, }, }, }, }, }, }, }, TransportBody = new TransportRequestBodyType() { Items = new object[] { new DataType1() { Item = new Base64CharSequenceType() { Value = requestDataEncrypted, }, }, }, }, }; var ns = new XmlSerializerNamespaces(); ns.Add("xreq", "http://www.extra-standard.de/namespace/request/1"); ns.Add("xcpt", "http://www.extra-standard.de/namespace/components/1"); ns.Add("xplg", "http://www.extra-standard.de/namespace/plugins/1"); var serializer = ExtraStandard.ExtraUtilities.GetSerializer <TransportRequestType>(); var output = new MemoryStream(); using (var writer = new StreamWriter(output)) { serializer.Serialize(writer, extra, ns); } var serialized = output.ToArray(); var document = XDocument.Load(new MemoryStream(serialized)); var validator = _validatorFactory.Create(ExtraMessageType.SupplyData, ExtraTransportDirection.Request, false); validator.Validate(document); return(document); }