Exemple #1
0
        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());
        }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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);
        }