Exemple #1
0
        private static Task WriteAsync(As4Message message, IOwinResponse response)
        {
            var responseMime = As4MessageToMimeEntity.Serialize(message);

            response.ContentType = responseMime.ContentType.MimeType + responseMime.ContentType.Parameters;
            return(responseMime.WriteToAsync(response.Body, true));
        }
        public static MimeEntity Serialize(As4Message message)
        {
            var stream = new MemoryStream();

            message.SoapEnvelope.Save(stream);

            var mimeRoot = new MimePart("application", "soap+xml")
            {
                Content = new MimeContent(stream)
            };

            if (message.Attachments.Count == 0)
            {
                return(mimeRoot);
            }

            var multipart = new Multipart("related")
            {
                mimeRoot
            };

            foreach (var messageAttachment in message.Attachments)
            {
                var mimeAttachment = new MimePart(messageAttachment.ContentType)
                {
                    ContentId               = messageAttachment.ContentId,
                    Content                 = new MimeContent(messageAttachment.Stream),
                    ContentDisposition      = new ContentDisposition(ContentDisposition.Attachment),
                    ContentTransferEncoding = ContentEncoding.Binary
                };
                multipart.Add(mimeAttachment);
            }

            return(multipart);
        }
Exemple #3
0
 public static void AreEqual(As4Message expected, As4Message actual)
 {
     Assert.AreEqual(expected.SoapEnvelope.OuterXml, actual.SoapEnvelope.OuterXml);
     Assert.AreEqual(expected.Attachments.Count, actual.Attachments.Count);
     for (int i = 0; i < expected.Attachments.Count; i++)
     {
         AreEqual(expected.Attachments[i], actual.Attachments[i]);
     }
 }
Exemple #4
0
        public As4Message Send(AccessPoint accessPoint, As4Message message)
        {
            var client = new As4Client
            {
                Certificate = Tls
            };

            return(client.Send(accessPoint.Outbox, message));
        }
Exemple #5
0
        public As4Message Send(AccessPoint destination, As4Message message)
        {
            var client = new As4Client
            {
                Certificate = Tls
            };

            return(client.Send(destination.SystemInbound, message));
        }
Exemple #6
0
        public static As4Message Create(Envelope envelope, params Attachment[] attachments)
        {
            var message = new As4Message();

            message.Set(envelope);

            foreach (var attachment in attachments)
            {
                message.Attachments.Add(attachment);
            }

            return(message);
        }
Exemple #7
0
        private void CheckSendAndReceive(As4Message expectedRequest)
        {
            Action <As4Message> handler = actualMessage =>
            {
                MessageAssert.AreEqual(expectedRequest, actualMessage);
            };

            using (Servers.Create(Url, handler))
            {
                var client = new As4Client();
                var result = client.Send(new Uri(Url), expectedRequest);
                Assert.IsNull(result);
            }
        }
Exemple #8
0
        private void CheckSendAndReceive(As4Message expectedRequest, As4Message expectedResponse)
        {
            Func <As4Message, As4Message> handler = actualRequest =>
            {
                MessageAssert.AreEqual(expectedRequest, actualRequest);
                return(expectedResponse);
            };

            using (Servers.Create(Url, handler))
            {
                var client         = new As4Client();
                var actualResponse = client.Send(new Uri(Url), expectedRequest);
                MessageAssert.AreEqual(expectedResponse, actualResponse);
            }
        }
Exemple #9
0
        public As4Message Send(AccessPoint destination, As4Message message)
        {
            var encrypter = new EbmsEncrypter
            {
                Attachments           = message.Attachments,
                PublicKeyInAsn1Format = destination.Ebms.GetPublicKey(),
                Xml = message.SoapEnvelope
            };

            encrypter.Encrypt();

            var client = new As4Client
            {
                Certificate = TlsExternal
            };

            return(client.Send(destination.BusinessInbound, message));
        }
Exemple #10
0
        public static As4Message ParseMultipart(Multipart multipart)
        {
            var message = new As4Message();

            var mimeParts = multipart.Cast <MimePart>();

            foreach (var part in mimeParts)
            {
                if (part.IsAttachment)
                {
                    message.Attachments.Add(ParseAttachment(part));
                }
                else
                {
                    message.SoapEnvelope = ParseXml(part);
                }
            }

            return(message);
        }
Exemple #11
0
        public As4Message Build()
        {
            var envelope = CreateSoapEnvelope();

            envelope.Header.Messaging.UserMessage.PartyInfo.From.PartyId.Value    = Sender.Code;
            envelope.Header.Messaging.UserMessage.PartyInfo.To.PartyId.Value      = Receiver.Code;
            envelope.Header.Messaging.UserMessage.CollaborationInfo.Service.Value = UseCase;

            envelope.Header.Messaging.UserMessage.PayloadInfo = new List <PartInfo>();

            if (Sed != null)
            {
                var sedPart = new PartInfo
                {
                    Reference      = $"cid:{Sed.ContentId}",
                    PartProperties = new List <Property>
                    {
                        new Property {
                            Name = "PartType", Value = "SED"
                        },
                        new Property {
                            Name = "MimeType", Value = Sed.ContentType
                        }
                    }
                };

                if (Sed.IsCompressionRequired)
                {
                    Sed.Stream = Compress(Sed.Stream);
                    sedPart.PartProperties.Add(new Property
                    {
                        Name = "CompressionType", Value = "application/gzip"
                    });
                }

                envelope.Header.Messaging.UserMessage.PayloadInfo.Add(sedPart);
            }

            foreach (var attachment in Attachments)
            {
                if (attachment.IsCompressionRequired)
                {
                    attachment.Stream = Compress(attachment.Stream);
                }

                var attachmentPart = new PartInfo
                {
                    Reference      = $"cid:{attachment.ContentId}",
                    PartProperties = new List <Property>
                    {
                        new Property {
                            Name = "PartType", Value = "Attachment"
                        },
                        new Property {
                            Name = "MimeType", Value = attachment.ContentType
                        },
                    }
                };

                if (attachment.IsCompressionRequired)
                {
                    attachment.Stream = Compress(attachment.Stream);
                    attachmentPart.PartProperties.Add(new Property
                    {
                        Name = "CompressionType", Value = "application/gzip"
                    });
                }
                envelope.Header.Messaging.UserMessage.PayloadInfo.Add(attachmentPart);
            }

            var message = new As4Message();

            message.Set(envelope);
            message.Attachments.Add(Sed);

            Sed.Stream.Position = 0;
            var ebmsSigner = new EbmsSigner
            {
                Xml         = message.SoapEnvelope,
                Certificate = Sender.Ebms,
                Uris        = new [] { envelope.Header.Messaging.Id, envelope.Body.Id },
                Attachments = message.Attachments
            };

            ebmsSigner.Sign();

            return(message);
        }