/// <summary> /// Initializes new Basic Film Box /// </summary> /// <param name="session">Basic Film Session</param> /// <param name="sopInstance">SOP Instance UID</param> public DcmFilmBox(DcmFilmSession session, DicomUID sopInstance) { _session = session; _sopInstance = sopInstance; _dataset = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian); _boxes = new List<DcmImageBox>(); }
/// <summary> /// Initializes new Basic Film Box /// </summary> /// <param name="session">Basic Film Session</param> /// <param name="sopInstance">SOP Instance UID</param> /// <param name="dataset">Dataset</param> public DcmFilmBox(DcmFilmSession session, DicomUID sopInstance, DcmDataset dataset) { _session = session; _sopInstance = sopInstance; _dataset = dataset; _boxes = new List<DcmImageBox>(); }
/// <summary> /// Initializes new Basic Image Box /// </summary> /// <param name="filmBox">Basic Film Box</param> /// <param name="sopClass">SOP Class UID</param> /// <param name="sopInstance">SOP Instance UID</param> /// <param name="dataset">Dataset</param> public DcmImageBox(DcmFilmBox filmBox, DicomUID sopClass, DicomUID sopInstance, DcmDataset dataset) { _filmBox = filmBox; _sopClass = sopClass; _sopInstance = sopInstance; _dataset = dataset; }
/// <summary> /// Initializes new Basic Image Box /// </summary> /// <param name="filmBox">Basic Film Box</param> /// <param name="sopClass">SOP Class UID</param> /// <param name="sopInstance">SOP Instance UID</param> public DcmImageBox(DcmFilmBox filmBox, DicomUID sopClass, DicomUID sopInstance) { _filmBox = filmBox; _sopClass = sopClass; _sopInstance = sopInstance; _dataset = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian); }
internal DcmPresContext(byte pcid, DicomUID abstractSyntax, DicomTransferSyntax transferSyntax, DcmPresContextResult result) { _pcid = pcid; _result = result; _abstract = abstractSyntax; _transfers = new List<DicomTransferSyntax>(); _transfers.Add(transferSyntax); }
public DicomTransferSyntax(DicomUID uid, bool be, bool evr, bool encaps, bool lssy, bool dflt) { UID = uid; IsBigEndian = be; IsExplicitVR = evr; IsEncapsulated = encaps; IsLossy = lssy; IsDeflate = dflt; Endian = IsBigEndian ? Endian.Big : Endian.Little; }
public CMoveClient() : base() { LogID = "C-Move SCU"; CallingAE = "MOVE_SCU"; CalledAE = "MOVE_SCP"; _moveSopClass = DicomUID.StudyRootQueryRetrieveInformationModelMOVE; _moveQueries = new Queue<CMoveQuery>(); _current = null; }
protected override void OnReceiveCStoreRequest(byte presentationID, ushort messageID, DicomUID affectedInstance, DcmPriority priority, string moveAE, ushort moveMessageID, DcmDataset dataset, string fileName) { DcmStatus status = DcmStatus.Success; if (OnCStoreRequest != null) status = OnCStoreRequest(this, presentationID, messageID, affectedInstance, priority, moveAE, moveMessageID, dataset, fileName); SendCStoreResponse(presentationID, messageID, affectedInstance, status); }
/// <summary> /// Initializes new Basic Film Session /// </summary> /// <param name="sessionClass">Color or Grayscale Basic Print Management UID</param> /// <param name="sopInstance">SOP Instance UID</param> /// <param name="dataset">Dataset</param> public DcmFilmSession(DicomUID sessionClass, DicomUID sopInstance, DcmDataset dataset) { _sessionClass = sessionClass; _sopInstance = sopInstance; _dataset = dataset; _boxes = new List<DcmFilmBox>(); if (_sopInstance == null || _sopInstance.UID == String.Empty) _sopInstance = DicomUID.Generate(); }
public DcmAssociate() { _maxPdu = (uint)PDataTFStream.MaxPduSizeLimit; _appCtxNm = DicomUID.DICOMApplicationContextName; _implClass = Implementation.ClassUID; _implVersion = Implementation.Version; _presContexts = new SortedList<byte, DcmPresContext>(); _negotiateAsync = false; _opsInvoked = 1; _opsPerformed = 1; }
public void AddPresentationContext(byte pcid, DicomUID abstractSyntax, DicomTransferSyntax transferSyntax, DcmPresContextResult result) { _presContexts.Add(pcid, new DcmPresContext(pcid, abstractSyntax, transferSyntax, result)); }
/// <summary> /// Adds a Presentation Context to the DICOM Associate. /// </summary> public void AddPresentationContext(byte pcid, DicomUID abstractSyntax) { _presContexts.Add(pcid, new DcmPresContext(pcid, abstractSyntax)); }
/// <summary> /// Adds a Presentation Context to the DICOM Associate. /// </summary> public byte AddPresentationContext(DicomUID abstractSyntax) { byte pcid = 1; foreach (byte id in _presContexts.Keys) { if (id >= pcid) pcid = (byte)(id + 2); } AddPresentationContext(pcid, abstractSyntax); return pcid; }
protected void SendNSetRequest(byte presentationID, ushort messageID, DicomUID requestedClass, DicomUID requestedInstance, DcmDataset dataset) { DcmCommand command = new DcmCommand(); command.RequestedSOPClassUID = requestedClass; command.CommandField = DcmCommandField.NSetRequest; command.MessageID = messageID; command.HasDataset = (dataset != null); command.RequestedSOPInstanceUID = requestedInstance; Log.Info("{0} -> N-Set request [pc: {1}; id: {2}; class: {3}]", LogID, presentationID, messageID, requestedClass.Description); SendDimse(presentationID, command, dataset); }
protected void SendNSetResponse(byte presentationID, ushort messageIdRespondedTo, DicomUID affectedClass, DicomUID affectedInstance, DcmDataset dataset, DcmStatus status) { DcmCommand command = new DcmCommand(); command.AffectedSOPClassUID = affectedClass; command.CommandField = DcmCommandField.NSetResponse; command.MessageIDBeingRespondedTo = messageIdRespondedTo; command.HasDataset = (dataset != null); command.Status = status; command.AffectedSOPInstanceUID = affectedInstance; Log.Info("{0} -> N-Set response [id: {1}; class: {2}]: {3}", LogID, messageIdRespondedTo, affectedClass.Description, status); SendDimse(presentationID, command, dataset); }
public DcmPresContext(byte pcid, DicomUID abstractSyntax) { _pcid = pcid; _result = DcmPresContextResult.Proposed; _abstract = abstractSyntax; _transfers = new List<DicomTransferSyntax>(); }
protected virtual void OnPreReceiveCStoreRequest(byte presentationID, ushort messageID, DicomUID affectedInstance, DcmPriority priority, string moveAE, ushort moveMessageID, out string fileName) { if (UseFileBuffer) { fileName = Path.GetTempFileName(); } else { fileName = null; } }
protected void SendCStoreResponse(byte presentationID, ushort messageIdRespondedTo, DicomUID affectedInstance, DcmStatus status) { DicomUID affectedClass = Associate.GetAbstractSyntax(presentationID); DcmCommand command = CreateResponse(messageIdRespondedTo, DcmCommandField.CStoreResponse, affectedClass, status, false); command.AffectedSOPInstanceUID = affectedInstance; Log.Info("{0} -> C-Store response [id: {1}]: {2}", LogID, messageIdRespondedTo, status); SendDimse(presentationID, command, null); }
protected void SendNActionRequest(byte presentationID, ushort messageID, DicomUID requestedClass, DicomUID requestedInstance, ushort actionTypeID, DcmDataset dataset) { DcmCommand command = new DcmCommand(); command.RequestedSOPClassUID = requestedClass; command.CommandField = DcmCommandField.NActionRequest; command.MessageID = messageID; command.HasDataset = (dataset != null); command.RequestedSOPInstanceUID = requestedInstance; command.ActionTypeID = actionTypeID; Log.Info("{0} -> N-Action request [pc: {1}; id: {2}; class: {3}; action: {4:x4}]", LogID, presentationID, messageID, requestedClass, actionTypeID); SendDimse(presentationID, command, dataset); }
private DcmCommand CreateResponse(ushort messageIdRespondedTo, DcmCommandField commandField, DicomUID affectedClass, DcmStatus status, bool hasDataset) { DcmCommand command = new DcmCommand(); command.AffectedSOPClassUID = affectedClass; command.CommandField = commandField; command.MessageIDBeingRespondedTo = messageIdRespondedTo; command.HasDataset = hasDataset; command.Status = status; if (!String.IsNullOrEmpty(status.ErrorComment)) command.ErrorComment = status.ErrorComment; return command; }
/// <summary> /// The C-STORE service is used by a DIMSE-service-user to store a composite /// SOP Instance on a peer DIMSE-service-user. It is a confirmed service. /// </summary> /// <param name="presentationID">The Presentation Context ID identifies the /// Presentation Context within the scope of a specific Association.</param> /// <param name="messageID">This parameter identifies the operation. It is used /// to distinguish this operation from other notifications or operations that /// the DIMSE-service-provider may have in progress. No two identical values /// for the Message ID (0000,0110) shall be used for outstanding operations or /// notifications.</param> /// <param name="affectedInstance">For the request/indication, this parameter /// specifies the SOP Instance to be stored. It may be included in the /// response/confirmation. If included in the response/confirmation, this /// parameter shall be equal to the value in the request/indication.</param> /// <param name="priority">This parameter specifies the priority of the /// C-STORE operation. It shall be one of LOW, MEDIUM, or HIGH.</param> /// <param name="moveAE">This parameter specifies the DICOM AE Title of the /// DICOM AE which invoked the C-MOVE operation from which this C-STORE /// sub-operation is being performed.</param> /// <param name="moveMessageID">This parameter specifies the Message ID (0000,0110) /// of the C-MOVE request/indication primitive from which this C-STORE /// sub-operation is being performed.</param> /// <param name="datastream">The Data Set accompanying the C-STORE primitive /// contains the Attributes of the Composite SOP Instance to be stored.</param> protected void SendCStoreRequest(byte presentationID, ushort messageID, DicomUID affectedInstance, DcmPriority priority, string moveAE, ushort moveMessageID, Stream datastream) { DicomUID affectedClass = Associate.GetAbstractSyntax(presentationID); DcmCommand command = CreateRequest(messageID, DcmCommandField.CStoreRequest, affectedClass, priority, true); command.AffectedSOPInstanceUID = affectedInstance; if (moveAE != null && moveAE != String.Empty) { command.MoveOriginatorAE = moveAE; command.MoveOriginatorMessageID = moveMessageID; } Log.Info("{0} -> C-Store request [pc: {1}; id: {2}] (stream)\n\t=> {3}\n\t=> {4}", LogID, presentationID, messageID, affectedInstance, affectedClass); SendDimseStream(presentationID, command, datastream); }
protected virtual void OnReceiveNSetResponse(byte presentationID, ushort messageIdRespondedTo, DicomUID affectedClass, DicomUID affectedInstance, DcmDataset dataset, DcmStatus status) { SendAbort(DcmAbortSource.ServiceProvider, DcmAbortReason.NotSpecified); }
protected virtual void OnReceiveNSetRequest(byte presentationID, ushort messageID, DicomUID requestedClass, DicomUID requestedInstance, DcmDataset dataset) { SendAbort(DcmAbortSource.ServiceProvider, DcmAbortReason.NotSpecified); }
protected virtual void OnReceiveCStoreRequest(byte presentationID, ushort messageID, DicomUID affectedInstance, DcmPriority priority, string moveAE, ushort moveMessageID, DcmDataset dataset, string fileName) { SendAbort(DcmAbortSource.ServiceProvider, DcmAbortReason.NotSpecified); }
/// <summary> /// Finds the Presentation Context with the specified Abstract Syntax. /// </summary> /// <param name="abstractSyntax">Abstract Syntax</param> /// <returns>Presentation Context ID</returns> public byte FindAbstractSyntax(DicomUID abstractSyntax) { foreach (DcmPresContext ctx in _presContexts.Values) { if (ctx.AbstractSyntax == abstractSyntax && ctx.Result == DcmPresContextResult.Accept) return ctx.ID; } foreach (DcmPresContext ctx in _presContexts.Values) { if (ctx.AbstractSyntax == abstractSyntax) return ctx.ID; } return 0; }
protected void SendNEventReportRequest(byte presentationID, ushort messageID, DicomUID affectedClass, DicomUID affectedInstance, ushort eventTypeID, DcmDataset dataset) { DcmCommand command = new DcmCommand(); command.AffectedSOPClassUID = affectedClass; command.CommandField = DcmCommandField.NEventReportRequest; command.MessageID = messageID; command.HasDataset = (dataset != null); command.AffectedSOPInstanceUID = affectedInstance; command.EventTypeID = eventTypeID; Log.Info("{0} -> N-EventReport request [pc: {1}; id: {2}; class: {3}; event: {4:x4}]", LogID, presentationID, messageID, affectedClass.Description, eventTypeID); SendDimse(presentationID, command, dataset); }
/// <summary> /// Finds the Presentation Context with the specified Abstract Syntax and Transfer Syntax. /// </summary> /// <param name="abstractSyntax">Abstract Syntax</param> /// <param name="transferSyntax">Transfer Syntax</param> /// <returns>Presentation Context ID</returns> public byte FindAcceptedAbstractSyntaxWithTransferSyntax(DicomUID abstractSyntax, DicomTransferSyntax trasferSyntax) { foreach (DcmPresContext ctx in _presContexts.Values) { if (ctx.Result == DcmPresContextResult.Accept && ctx.AbstractSyntax == abstractSyntax && ctx.HasTransfer(trasferSyntax)) return ctx.ID; } return 0; }
protected void SendNGetRequest(byte presentationID, ushort messageID, DicomUID requestedClass, DicomUID requestedInstance, DicomTag[] attributes) { DcmCommand command = new DcmCommand(); command.RequestedSOPClassUID = requestedClass; command.CommandField = DcmCommandField.NGetRequest; command.MessageID = messageID; command.HasDataset = false; command.RequestedSOPInstanceUID = requestedInstance; command.AttributeIdentifierList = new DcmAttributeTag(DicomTags.AttributeIdentifierList); command.AttributeIdentifierList.SetValues(attributes); Log.Info("{0} -> N-Get request [pc: {1}; id: {2}; class: {3}]", LogID, presentationID, messageID, requestedClass.Description); SendDimse(presentationID, command, null); }
/// <summary> /// The C-STORE service is used by a DIMSE-service-user to store a composite /// SOP Instance on a peer DIMSE-service-user. It is a confirmed service. /// </summary> /// <param name="presentationID">The Presentation Context ID identifies the /// Presentation Context within the scope of a specific Association.</param> /// <param name="messageID">This parameter identifies the operation. It is used /// to distinguish this operation from other notifications or operations that /// the DIMSE-service-provider may have in progress. No two identical values /// for the Message ID (0000,0110) shall be used for outstanding operations or /// notifications.</param> /// <param name="affectedInstance">For the request/indication, this parameter /// specifies the SOP Instance to be stored. It may be included in the /// response/confirmation. If included in the response/confirmation, this /// parameter shall be equal to the value in the request/indication.</param> /// <param name="priority">This parameter specifies the priority of the /// C-STORE operation. It shall be one of LOW, MEDIUM, or HIGH.</param> /// <param name="datastream">The Data Set accompanying the C-STORE primitive /// contains the Attributes of the Composite SOP Instance to be stored.</param> protected void SendCStoreRequest(byte presentationID, ushort messageID, DicomUID affectedInstance, DcmPriority priority, Stream datastream) { SendCStoreRequest(presentationID, messageID, affectedInstance, priority, null, 0, datastream); }
protected virtual void OnPostReceiveCStoreRequest(byte presentationID, ushort messageID, DicomUID affectedInstance, DcmDataset dataset, string fileName) { if (!String.IsNullOrEmpty(fileName)) { if (File.Exists(fileName)) { try { File.Delete(fileName); } catch { } } } }