public static void ReferansEkle(this PaketOzeti paketOzeti,
                                        PaketVersiyonTuru paketVersiyon,
                                        OzetAlgoritmaTuru ozetAlgoritma,
                                        byte[] ozetDegeri,
                                        Uri uri,
                                        byte[] ozetDegeriSha512 = null,
                                        bool hariciBilesenMi    = false)
        {
            if (ozetAlgoritma == OzetAlgoritmaTuru.YOK)
            {
                throw new ArgumentException(
                          nameof(ozetAlgoritma) + " değeri " + nameof(OzetAlgoritmaTuru.YOK) + " olmamalıdır.",
                          nameof(ozetAlgoritma));
            }
            if (ozetAlgoritma == OzetAlgoritmaTuru.SHA384 && paketVersiyon == PaketVersiyonTuru.Versiyon1X)
            {
                throw new ArgumentException(
                          nameof(OzetAlgoritmaTuru.SHA384) +
                          " özet algoritması yalnızca e-Yazışma API 2.X versiyonlarında kullanılabilir.",
                          nameof(ozetAlgoritma));
            }

            if (paketOzeti.Referanslar != null && paketOzeti.Referanslar.Count > 0)
            {
                var oncekiReferans = paketOzeti.Referanslar.Find(p =>
                                                                 string.Compare(p.URI, uri.ToString(), StringComparison.InvariantCultureIgnoreCase) == 0);
                if (oncekiReferans != default(Referans))
                {
                    paketOzeti.Referanslar.Remove(oncekiReferans);
                }
            }
            else
            {
                paketOzeti.Referanslar = new List <Referans>();
            }

            var yeniReferans = new Referans
            {
                Ozet = Ozet.Kilavuz.OzetAlgoritmasiAta(OzetAlgoritmasi.Kilavuz.AlgoritmaAta(ozetAlgoritma).Olustur())
                       .OzetDegeriAta(ozetDegeri).Olustur(),
                URI  = uri.ToString(),
                Type = hariciBilesenMi
                    ? Constants.HARICI_PAKET_BILESENI_REFERANS_TIPI
                    : Constants.DAHILI_PAKET_BILESENI_REFERANS_TIPI
            };

            if (paketVersiyon == PaketVersiyonTuru.Versiyon2X)
            {
                yeniReferans.Ozet1 = Ozet.Kilavuz
                                     .OzetAlgoritmasiAta(OzetAlgoritmasi.Kilavuz.AlgoritmaAta(OzetAlgoritmaTuru.SHA512).Olustur())
                                     .OzetDegeriAta(ozetDegeriSha512).Olustur();
            }

            paketOzeti.Referanslar.Add(yeniReferans);
        }
예제 #2
0
        public static void GeneratePaketOzeti(this Package package, PaketOzeti paketOzeti,
                                              PaketVersiyonTuru paketVersiyon)
        {
            if (paketOzeti != null && paketOzeti.Referanslar != null && paketOzeti.Referanslar.Count > 0)
            {
                object paketOzetiObject = null;
                Type   paketOzetiType   = null;

                switch (paketVersiyon)
                {
                case PaketVersiyonTuru.Versiyon1X:
                {
                    paketOzetiObject = paketOzeti.ToV1XCT_PaketOzeti();
                    paketOzetiType   = typeof(CT_PaketOzeti);
                    break;
                }

                case PaketVersiyonTuru.Versiyon2X:
                {
                    paketOzetiObject = paketOzeti.ToV2XCT_PaketOzeti();
                    paketOzetiType   = typeof(Api.V2X.CT_PaketOzeti);
                    break;
                }
                }

                var partPaketOzeti = package.CreatePart(Constants.URI_PAKETOZETI, Constants.MIME_XML,
                                                        CompressionOption.Maximum);
                package.CreateRelationship(partPaketOzeti.Uri, TargetMode.Internal, Constants.RELATION_TYPE_PAKETOZETI,
                                           Constants.ID_PaketOzeti);
                var xmlSerializer = new XmlSerializer(paketOzetiType);
                using (var xmlTextWriter = new XmlTextWriter(partPaketOzeti.GetStream(), Encoding.UTF8)
                {
                    Formatting = Formatting.Indented
                })
                {
                    xmlSerializer.Serialize(xmlTextWriter, paketOzetiObject);
                }
            }
        }