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 }); }
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 }); }
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); }
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"); } }
public static void AssertItemType(DICOMBinaryReader dr, string itemName, ItemType itemType) { var header = dr.Peek(1)[0]; if (header != (byte)itemType) { throw new Exception(); } }
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); }