Exemple #1
0
 /// <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>();
 }
Exemple #2
0
 /// <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>();
 }
Exemple #3
0
 /// <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;
 }
Exemple #4
0
 /// <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);
 }
Exemple #5
0
		internal DcmPresContext(byte pcid, DicomUID abstractSyntax, DicomTransferSyntax transferSyntax, DcmPresContextResult result) {
			_pcid = pcid;
			_result = result;
			_abstract = abstractSyntax;
			_transfers = new List<DicomTransferSyntax>();
			_transfers.Add(transferSyntax);
		}
Exemple #6
0
		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;
		}
Exemple #7
0
 public CMoveClient()
     : base()
 {
     LogID = "C-Move SCU";
     CallingAE = "MOVE_SCU";
     CalledAE = "MOVE_SCP";
     _moveSopClass = DicomUID.StudyRootQueryRetrieveInformationModelMOVE;
     _moveQueries = new Queue<CMoveQuery>();
     _current = null;
 }
Exemple #8
0
		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);
		}
Exemple #9
0
        /// <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();
        }
Exemple #10
0
 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;
 }
Exemple #11
0
 public void AddPresentationContext(byte pcid, DicomUID abstractSyntax, DicomTransferSyntax transferSyntax, DcmPresContextResult result)
 {
     _presContexts.Add(pcid, new DcmPresContext(pcid, abstractSyntax, transferSyntax, result));
 }
Exemple #12
0
 /// <summary>
 /// Adds a Presentation Context to the DICOM Associate.
 /// </summary>
 public void AddPresentationContext(byte pcid, DicomUID abstractSyntax)
 {
     _presContexts.Add(pcid, new DcmPresContext(pcid, abstractSyntax));
 }
Exemple #13
0
 /// <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;
 }
Exemple #14
0
 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);
 }
Exemple #15
0
 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);
 }
Exemple #16
0
 public DcmPresContext(byte pcid, DicomUID abstractSyntax)
 {
     _pcid = pcid;
     _result = DcmPresContextResult.Proposed;
     _abstract = abstractSyntax;
     _transfers = new List<DicomTransferSyntax>();
 }
Exemple #17
0
 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;
     }
 }
Exemple #18
0
 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);
 }
Exemple #19
0
 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);
 }
Exemple #20
0
 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;
 }
Exemple #21
0
        /// <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);
        }
Exemple #22
0
 protected virtual void OnReceiveNSetResponse(byte presentationID, ushort messageIdRespondedTo, DicomUID affectedClass, DicomUID affectedInstance,
     DcmDataset dataset, DcmStatus status)
 {
     SendAbort(DcmAbortSource.ServiceProvider, DcmAbortReason.NotSpecified);
 }
Exemple #23
0
 protected virtual void OnReceiveNSetRequest(byte presentationID, ushort messageID, DicomUID requestedClass, DicomUID requestedInstance, DcmDataset dataset)
 {
     SendAbort(DcmAbortSource.ServiceProvider, DcmAbortReason.NotSpecified);
 }
Exemple #24
0
 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);
 }
Exemple #25
0
 /// <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;
 }
Exemple #26
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);
 }
Exemple #27
0
 /// <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;
 }
Exemple #28
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);
 }
Exemple #29
0
 /// <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);
 }
Exemple #30
0
 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 {
             }
         }
     }
 }