コード例 #1
0
        private static void Write7BitEncodedInt(this IBufferWriter <byte> output, int value)
        {
            var writer = new LengthWriter(output);

            SevenBitEncodedInt.Encode(ref writer, (uint)value);
            output.Advance(writer.Count);
        }
コード例 #2
0
 public static void WriteMaxLength(DICOMBinaryWriter dw, int length)
 {
     dw.Write((byte)ItemType.MAXIMUM_LENGTH);
     dw.WriteNullBytes(1); // Reserved Null Byte
     LengthWriter.WriteBigEndian(dw, 4, 2);
     LengthWriter.WriteBigEndian(dw, length, 4);
 }
コード例 #3
0
ファイル: Request.cs プロジェクト: zzti/Evil-DICOM
        private byte[] WriteBody()
        {
            var body = new byte[0];

            using (var stream = new MemoryStream())
            {
                using (var dw = new DICOMBinaryWriter(stream))
                {
                    //Main body
                    LengthWriter.WriteBigEndian(dw, ProtocolVersion, 2); //Protocol Version
                    dw.WriteNullBytes(2);                                //Reserved Null bytes
                    dw.Write(CalledEntityTitle.PadRight(16));
                    dw.Write(CallingEntityTitle.PadRight(16));
                    dw.WriteNullBytes(32); //Reserved Null bytes
                    ItemWriter.WriteApplicationContext(dw, ApplicationContext);
                    foreach (var pc in PresentationContexts)
                    {
                        ItemWriter.WritePresentationCtxRequestType(dw, pc);
                    }
                    ItemWriter.WriteUserInfo(dw, UserInfo);
                    body = stream.ToArray();
                }
            }
            return(body);
        }
コード例 #4
0
ファイル: LengthTests.cs プロジェクト: zzti/Evil-DICOM
        public void WriteBigEndianLength3()
        {
            var len = 10;

            byte[] bytes;
            using (var ms = new MemoryStream())
            {
                var             dw       = new DICOMBinaryWriter(ms);
                VR              vr       = VR.CodeString;
                DICOMIOSettings settings = new DICOMIOSettings()
                {
                    TransferSyntax = TransferSyntax.EXPLICIT_VR_BIG_ENDIAN, DoWriteIndefiniteSequences = false
                };
                var data = new byte[10];
                LengthWriter.Write(dw, vr, settings, data != null ? data.Length : 0);
                bytes = ms.ToArray();
            }

            var read = LengthReader.ReadLittleEndian(bytes);

            Assert.AreNotEqual(len, read);

            read = LengthReader.ReadBigEndian(bytes);
            Assert.AreEqual(len, read);
        }
コード例 #5
0
 private static void WriteUIDItem(DICOMBinaryWriter dw, ItemType iType, string uid)
 {
     if (!string.IsNullOrEmpty(uid))
     {
         dw.Write((byte)iType);
         dw.WriteNullBytes(1); // Reserved Null Byte
         LengthWriter.WriteBigEndian(dw, uid.Length, 2);
         dw.Write(uid);
     }
 }
コード例 #6
0
 public static void WriteAsyncOperations(DICOMBinaryWriter dw, AsyncOperations ao)
 {
     if (ao != null)
     {
         dw.Write((byte)ItemType.ASYNCHRONOUS_OPERATIONS_WINDOW);
         dw.WriteNullBytes(1); // Reserved Null Byte
         LengthWriter.WriteBigEndian(dw, 4, 2);
         LengthWriter.WriteBigEndian(dw, ao.MaxInvokeOperations, 2);
         LengthWriter.WriteBigEndian(dw, ao.MaxPerformOperations, 2);
     }
 }
コード例 #7
0
ファイル: LengthTests.cs プロジェクト: zzti/Evil-DICOM
        public void WriteLittleEndian2()
        {
            var len = 2500;

            byte[] bytes;
            using (var ms = new MemoryStream())
            {
                var dw = new DICOMBinaryWriter(ms);
                LengthWriter.WriteLittleEndian(dw, len, 2);
                bytes = ms.ToArray();
            }
            var read = LengthReader.ReadLittleEndian(bytes);

            Assert.AreEqual(len, read);
        }
コード例 #8
0
        public static void WritePDVItem(DICOMBinaryWriter dw, PDVItem pdv)
        {
            //Write fragment first so we have length
            var fragment = new byte[0];

            using (var stream = new MemoryStream())
            {
                using (var fragDw = new DICOMBinaryWriter(stream))
                {
                    WritePDVFragment(fragDw, pdv.Fragment);
                    fragment = stream.ToArray();
                }
            }
            LengthWriter.WriteBigEndian(dw, fragment.Length + 1, 4);
            dw.Write((byte)pdv.PresentationContextID);
            dw.Write(fragment);
        }
コード例 #9
0
ファイル: Abort.cs プロジェクト: zzti/Evil-DICOM
        public byte[] Write()
        {
            var written = new byte[0];
            var stream  = new MemoryStream();

            using (var dw = new DICOMBinaryWriter(stream))
            {
                dw.Write((byte)PDUType.A_ABORT);
                dw.WriteNullBytes(1); //Reserved Null byte
                LengthWriter.WriteBigEndian(dw, 4, 4);
                dw.WriteNullBytes(2); //Reserved Null bytes
                dw.Write((byte)Source);
                dw.Write((byte)Reason);
                written = stream.ToArray();
            }
            return(written);
        }
コード例 #10
0
ファイル: PDataTF.cs プロジェクト: yjsyyyjszf/DicomFinder-1
        public byte[] Write()
        {
            var written = new byte[0];

            using (var stream = new MemoryStream())
            {
                using (var dw = new DICOMBinaryWriter(stream))
                {
                    dw.Write((byte)PDUType.P_DATA_TRANSFER);
                    dw.WriteNullBytes(1); //Reserved Null byte
                    byte[] items = WriteItems();
                    LengthWriter.WriteBigEndian(dw, items.Length, 4);
                    dw.Write(items);
                    written = stream.ToArray();
                }
            }
            return(written);
        }
コード例 #11
0
ファイル: Request.cs プロジェクト: zzti/Evil-DICOM
        public byte[] Write()
        {
            var written = new byte[0];

            using (var stream = new MemoryStream())
            {
                using (var dw = new DICOMBinaryWriter(stream))
                {
                    dw.Write((byte)PDUType.A_ASSOC_REQUEST);
                    dw.WriteNullBytes(1); //Reserved Null byte
                    var body = WriteBody();
                    LengthWriter.WriteBigEndian(dw, body.Length, 4);
                    dw.Write(body);
                    written = stream.ToArray();
                }
            }
            return(written);
        }
コード例 #12
0
 public static void WritePresentationCtxAcceptType(DICOMBinaryWriter dw, PresentationContext pc)
 {
     dw.Write((byte)ItemType.PRESENTATION_CONTEXT_ACCEPT);
     dw.WriteNullBytes(1); //Reserved Null Byte
     byte[] internBytes;   //Will use to get length
     using (var stream = new MemoryStream())
     {
         using (var intern = new DICOMBinaryWriter(stream))
         {
             intern.Write((byte)pc.Id);
             intern.WriteNullBytes(1);
             intern.Write((byte)pc.Reason);
             intern.WriteNullBytes(1);
             WriteTransferSyntax(intern, pc.TransferSyntaxes.First());
             internBytes = stream.ToArray();
         }
     }
     LengthWriter.WriteBigEndian(dw, internBytes.Length, 2);
     dw.Write(internBytes);
 }
コード例 #13
0
        public static void WriteUserInfo(DICOMBinaryWriter dw, UserInfo info)
        {
            dw.Write((byte)ItemType.USER_INFO);
            dw.WriteNullBytes(1); // Reserved Null Byte
            var body = new byte[0];

            using (var stream = new MemoryStream()) //Will write inner object to get length
            {
                using (var wr = new DICOMBinaryWriter(stream))
                {
                    WriteMaxLength(wr, info.MaxPDULength);
                    WriteImplementationClassUID(wr, info.ImplementationUID);
                    WriteAsyncOperations(wr, info.AsynchronousOperations);
                    WriteImplementationVersion(wr, info.ImplementationVersion);
                    body = stream.ToArray();
                }
            }
            LengthWriter.WriteBigEndian(dw, body.Length, 2);
            dw.Write(body);
        }