示例#1
0
        public static Message <Request> ReadAssociationRequest(NetworkBinaryReader dr)
        {
            var rq = new Request();

            rq.PresentationContexts = new List <PresentationContext>();
            dr.Skip(1); //PDU ID and Reserved Null Byte
            int length = LengthReader.ReadBigEndian(dr.Take(4));

            using (DICOMBinaryReader sub = dr.GetSubStream(length))
            {
                rq.ProtocolVersion = LengthReader.ReadBigEndian(sub, 2);
                sub.Skip(2); //Reserved Null Bytes
                rq.CalledEntityTitle  = sub.ReadString(16).Trim();
                rq.CallingEntityTitle = sub.ReadString(16).Trim();
                sub.Skip(32); //Reserved Null Bytes
                rq.ApplicationContext = ItemReader.ReadApplicationContext(sub);
                while (sub.Peek(1)[0] == (byte)ItemType.PRESENTATION_CONTEXT_REQUEST)
                {
                    PresentationContext context = ItemReader.ReadPresentationCtxRequest(sub);
                    rq.PresentationContexts.Add(context);
                }
                rq.UserInfo = ItemReader.ReadUserInfo(sub);
            }
            return(new Message <Request> {
                Payload = rq, Type = MessageType.PDU
            });
        }
示例#2
0
        public static Message <Accept> ReadAssociationAccept(NetworkBinaryReader dr)
        {
            var acc = new Accept();

            acc.PresentationContexts = new List <PresentationContext>();

            dr.Skip(1); //PDU ID and Reserved Null Byte
            int length = LengthReader.ReadBigEndian(dr.Take(4));

            using (DICOMBinaryReader sub = dr.GetSubStream(length))
            {
                acc.ProtocolVersion = LengthReader.ReadBigEndian(sub, 2);
                sub.Skip(2); //Reserved Null Bytes
                acc.CalledEntityTitle  = sub.ReadString(16).Trim();
                acc.CallingEntityTitle = sub.ReadString(16).Trim();
                sub.Skip(32); //Reserved Null Bytes
                acc.ApplicationContext = ItemReader.ReadApplicationContext(sub);
                while (sub.Peek(1).First() == (byte)ItemType.PRESENTATION_CONTEXT_ACCEPT)
                {
                    PresentationContext context = ItemReader.ReadPresentationCtxAccept(sub);
                    if (context != null)
                    {
                        acc.PresentationContexts.Add(context);
                    }
                }
                acc.UserInfo = ItemReader.ReadUserInfo(sub);
            }
            return(new Message <Accept> {
                Payload = acc, Type = MessageType.PDU
            });
        }
示例#3
0
        public static UserInfo ReadUserInfo(DICOMBinaryReader dr)
        {
            AssertItemType(dr, "User Info", ItemType.USER_INFO);
            var ui = new UserInfo();

            dr.Skip(2); // PDU ID and Reserved Null Byte
            var length = LengthReader.ReadBigEndian(dr, 2);

            if (length > 0)
            {
                ui.MaxPDULength = (int)ReadMaxLength(dr);

                if (dr.StreamPosition >= dr.StreamLength)
                {
                    return(ui);
                }
                ui.ImplementationUID = ReadImplementationClassUID(dr);

                if (dr.StreamPosition >= dr.StreamLength)
                {
                    return(ui);
                }
                if (dr.Peek(1)[0] == (byte)ItemType.ASYNCHRONOUS_OPERATIONS_WINDOW)
                {
                    ui.AsynchronousOperations = ReadAsyncOperations(dr);
                }

                if (dr.StreamPosition >= dr.StreamLength)
                {
                    return(ui);
                }
                if (dr.Peek(1)[0] == (byte)ItemType.IMPLEMENTATION_VERSION_NAME)
                {
                    ui.ImplementationVersion = ReadImplementationVersion(dr);
                }

                if (dr.StreamPosition >= dr.StreamLength)
                {
                    return(ui);
                }
                if (dr.Peek(1)[0] == (byte)ItemType.SCPSCU_ROLE_SELECTION)
                {
                    ui.ImplementationVersion = ReadSCPSCURoleSelection(dr);
                }
            }
            return(ui);
        }
示例#4
0
        public static void AssertItemType(DICOMBinaryReader dr, string itemName, ItemType itemType)
        {
            var header = dr.Peek(1)[0];

            if (header != (byte)itemType)
            {
                throw new FormatException($"Could not read {itemName} from DICOM stream");
            }
        }
示例#5
0
        public static void AssertItemType(DICOMBinaryReader dr, string itemName, ItemType itemType)
        {
            var header = dr.Peek(1)[0];

            if (header != (byte)itemType)
            {
                throw new Exception();
            }
        }
示例#6
0
        public static UserInfo ReadUserInfo(DICOMBinaryReader dr)
        {
            AssertItemType(dr, "User Info", ItemType.USER_INFO);
            var ui = new UserInfo();

            dr.Skip(2); // PDU ID and Reserved Null Byte
            var length = LengthReader.ReadBigEndian(dr, 2);

            if (length > 0)
            {
                ui.MaxPDULength      = (int)ReadMaxLength(dr);
                ui.ImplementationUID = ReadImplementationClassUID(dr);
                if (dr.Peek(1)[0] == (byte)ItemType.ASYNCHRONOUS_OPERATIONS_WINDOW)
                {
                    ui.AsynchronousOperations = ReadAsyncOperations(dr);
                }
                ui.ImplementationVersion = ReadImplementationVersion(dr);
            }
            return(ui);
        }