Ejemplo n.º 1
0
 /// <summary>
 /// Override this method to handle an A-ASSOCIATE-AC.
 /// </summary>
 /// <param name="associateAc">The received A-ASSOCIATE-AC.</param>
 /// <returns>Return true when this methods has handled the received A-ASSOCIATE-AC, otherwise false.</returns>
 public virtual bool HandleAssociateAccept(AssociateAc associateAc)
 {
     return false;
 }
Ejemplo n.º 2
0
        // TODO!!!: split up in three different methods and add code comments.
        public AssociateAc SendAssociateAc(params Object[] parameters)
        {
            // Start Interface logging.
            // InterfaceLogging.Start(this, parameters);

            AssociateAc associateAc = new AssociateAc(new DvtkData.Dul.A_ASSOCIATE_AC());

            associateAc.DvtkDataAssociateAc.CallingAETitle = DvtkScriptSession.SutSystemSettings.AeTitle;
            associateAc.DvtkDataAssociateAc.CalledAETitle = DvtkScriptSession.DvtSystemSettings.AeTitle;
            associateAc.DvtkDataAssociateAc.UserInformation.MaximumLength.MaximumLengthReceived = DvtkScriptSession.DvtSystemSettings.MaximumLengthReceived;
            associateAc.DvtkDataAssociateAc.UserInformation.ImplementationClassUid.UID = DvtkScriptSession.DvtSystemSettings.ImplementationClassUid;

            if (!(parameters[0] is PresentationContext))
            {
                if (this.lastAssociateRq == null)
                {
                    DvtkHighLevelInterfaceException.Throw("No associate request received.");
                }
                else
                {
                    SetAcceptedPresentationContexts(this.lastAssociateRq, associateAc, parameters);
                }
            }
            else
            {
                // Parse all parameters of this method.
                foreach(Object parameter in parameters)
                {
                    PresentationContext presentationContext = parameter as PresentationContext;

                    // If parameter is of type PresentationContext...
                    if (presentationContext != null)
                    {
                        // If the presentation context can be interpreted as a PC for an A_ASSOCIATE_AC...
                        if (presentationContext.InterpretAsPcForAssociateAc())
                        {
                            DvtkData.Dul.AcceptedPresentationContext acceptedPresentationContext = new DvtkData.Dul.AcceptedPresentationContext();

                            acceptedPresentationContext.AbstractSyntax = new DvtkData.Dul.AbstractSyntax(presentationContext.SopClass);
                            acceptedPresentationContext.TransferSyntax = new DvtkData.Dul.TransferSyntax(presentationContext.TransferSyntaxes[0] as String);
                            acceptedPresentationContext.Result = presentationContext.Result;

                            associateAc.DvtkDataAssociateAc.AddPresentationContexts(acceptedPresentationContext);
                        }
                        else
                        {
                            DvtkHighLevelInterfaceException.Throw("Error while interpreting parameters for PresentationContext");
                        }
                    }
                    else
                    {
                        DvtkHighLevelInterfaceException.Throw("Not all arguments could be used");
                    }
                }
            }

            Dvtk.Sessions.SendReturnCode sendReturnCode = DvtkScriptSession.Send(associateAc.DvtkDataAssociateAc);

            if (sendReturnCode != Dvtk.Sessions.SendReturnCode.Success)
            {
                DvtkHighLevelInterfaceException.Throw("Error sending associate accept (" + sendReturnCode.ToString() + ")");
            }
            else
            {
                associateAc.IsSend = true;
                ThreadManager.DataWarehouse.AddMessage(this, associateAc);
            }

            // End Interface logging.
            // InterfaceLogging.End(associateAc);

            return(associateAc);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Receive a message (can be a Dicom or Dul message).
        /// 
        /// An exception is thrown when receiving of a message fails.
        /// </summary>
        /// <returns>The received message.</returns>
        public Message ReceiveMessage()
        {
            // Start Interface logging.
            // InterfaceLogging.Start(this);

            DicomProtocolMessage receivedMessage = null;

            DvtkData.Message dvtkDataMessage = null;

            WriteInformation("Receive message...");

            Dvtk.Sessions.ReceiveReturnCode receiveReturnCode = DvtkScriptSession.Receive(out dvtkDataMessage);

            if (receiveReturnCode != Dvtk.Sessions.ReceiveReturnCode.Success)
            {
                DvtkHighLevelInterfaceException.Throw("Error while trying to receive a Message. Error code " + receiveReturnCode.ToString() + ".");
            }
            else
            {
                if (dvtkDataMessage is DvtkData.Dimse.DicomMessage)
                {
                    receivedMessage = new DicomMessage(dvtkDataMessage as DvtkData.Dimse.DicomMessage);
                }
                else if (dvtkDataMessage is DvtkData.Dul.A_ASSOCIATE_RQ)
                {
                    lastAssociateRq = new AssociateRq(dvtkDataMessage as DvtkData.Dul.A_ASSOCIATE_RQ);
                    receivedMessage = lastAssociateRq;
                }
                else if (dvtkDataMessage is DvtkData.Dul.A_ASSOCIATE_AC)
                {
                    receivedMessage = new AssociateAc(dvtkDataMessage as DvtkData.Dul.A_ASSOCIATE_AC);
                }
                else if (dvtkDataMessage is DvtkData.Dul.A_ASSOCIATE_RJ)
                {
                    receivedMessage = new AssociateRj(dvtkDataMessage as DvtkData.Dul.A_ASSOCIATE_RJ);
                }
                else if (dvtkDataMessage is DvtkData.Dul.A_RELEASE_RQ)
                {
                    receivedMessage = new ReleaseRq(dvtkDataMessage as DvtkData.Dul.A_RELEASE_RQ);
                }
                else if (dvtkDataMessage is DvtkData.Dul.A_RELEASE_RP)
                {
                    receivedMessage = new ReleaseRp(dvtkDataMessage as DvtkData.Dul.A_RELEASE_RP);
                }
                else if (dvtkDataMessage is DvtkData.Dul.A_ABORT)
                {
                    receivedMessage = new Abort(dvtkDataMessage as DvtkData.Dul.A_ABORT);
                }
                else
                {
                    Debug.Assert(true, "Unexpected DvtkData Message descendant type.");
                }

                // If the options AutoValidate is true, try to validate as much
                // as possible for the received message.
                if (Options.AutoValidate)
                {
                    Validate(receivedMessage);
                }

                receivedMessage.IsReceived = true;
                ThreadManager.DataWarehouse.AddMessage(this, receivedMessage);

                if (receivedMessage is ReleaseRq)
                {
                    if (AssociationReleasedEvent != null)
                    {
                        AssociationReleasedEvent(this);
                    }
                }
            }

            // End Interface logging.
            // InterfaceLogging.End(receivedMessage);

            return(receivedMessage);
        }
Ejemplo n.º 4
0
        private void SetAcceptedPresentationContexts(AssociateRq associateRq, AssociateAc associateAc, params Object[] parameters)
        {
            TransferSyntaxes transferSyntaxes = null;
            SopClasses sopClasses = null;

            if (parameters.Length == 1)
            {
                transferSyntaxes = parameters[0] as TransferSyntaxes;

                if (transferSyntaxes == null)
                {
                    DvtkHighLevelInterfaceException.Throw("Error while interpreting parameters.");
                }
            }
            else if (parameters.Length == 2)
            {
                transferSyntaxes = parameters[0] as TransferSyntaxes;

                if (transferSyntaxes == null)
                {
                    sopClasses = parameters[0] as SopClasses;

                    if (sopClasses == null)
                    {
                        DvtkHighLevelInterfaceException.Throw("Error while interpreting parameters.");
                    }
                    else
                    {
                        transferSyntaxes = parameters[1] as TransferSyntaxes;

                        if (transferSyntaxes == null)
                        {
                            DvtkHighLevelInterfaceException.Throw("Error while interpreting parameters.");
                        }
                    }
                }
                else
                {
                    sopClasses = parameters[1] as SopClasses;

                    if (sopClasses == null)
                    {
                        DvtkHighLevelInterfaceException.Throw("Error while interpreting parameters.");
                    }
                }
            }
            else
            {
                DvtkHighLevelInterfaceException.Throw("Error while interpreting parameters.");
            }

            foreach(DvtkData.Dul.RequestedPresentationContext dvtkDataRequestedPresentationContext in associateRq.DvtkDataAssociateRq.PresentationContexts)
            {
                String sopClassToAccept = null;
                String transferSyntaxToAccept = null;

                if (sopClasses == null)
                {
                    sopClassToAccept = dvtkDataRequestedPresentationContext.AbstractSyntax.UID;
                }
                else
                {
                    foreach(String acceptedSopClass in sopClasses.list)
                    {
                        if (acceptedSopClass == dvtkDataRequestedPresentationContext.AbstractSyntax.UID)
                        {
                            sopClassToAccept = dvtkDataRequestedPresentationContext.AbstractSyntax.UID;
                            break;
                        }
                    }
                }

                if (sopClassToAccept != null)
                {
                    foreach(String acceptedTransferSyntax in transferSyntaxes.list)
                    {
                        foreach(DvtkData.Dul.TransferSyntax requestedDvtkDataTransferSyntax in dvtkDataRequestedPresentationContext.TransferSyntaxes)
                        {
                            if (acceptedTransferSyntax == requestedDvtkDataTransferSyntax.UID)
                            {
                                transferSyntaxToAccept = requestedDvtkDataTransferSyntax.UID;
                                break;
                            }
                        }

                        if (transferSyntaxToAccept != null)
                        {
                            break;
                        }
                    }

                    if (transferSyntaxToAccept != null)
                    {
                        DvtkData.Dul.AcceptedPresentationContext dvtkDataAcceptedPresentationContext = new DvtkData.Dul.AcceptedPresentationContext();

                        dvtkDataAcceptedPresentationContext.AbstractSyntax = new DvtkData.Dul.AbstractSyntax(sopClassToAccept);
                        dvtkDataAcceptedPresentationContext.TransferSyntax = new DvtkData.Dul.TransferSyntax(transferSyntaxToAccept);
                        dvtkDataAcceptedPresentationContext.Result = 0;

                        associateAc.DvtkDataAssociateAc.AddPresentationContexts(dvtkDataAcceptedPresentationContext);
                    }
                }
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// This method is called after an A-ASSOCIATE-AC has been received but before it
 /// (possibly) will be handled by the (zero or more) MessageHandler objects that
 /// are attached to this object.
 /// 
 /// Default, nothing is done in this method. Override if needed.
 /// </summary>
 /// <param name="associateAc">The received A-ASSOCIATE-AC</param>
 public virtual void BeforeHandlingAssociateAccept(AssociateAc associateAc)
 {
     // Do nothing.
 }
Ejemplo n.º 6
0
 /// <summary>
 /// This method is called after an A-ASSOCIATE-AC has been received and has 
 /// (possibly) been handled by the (zero or more) MessageHandler objects that
 /// are attached to this object.
 /// 
 /// Default, nothing is done in this method. Override if needed.
 /// </summary>
 /// <param name="associateAc">The received A-ASSOCIATE-AC.</param>
 public virtual void AfterHandlingAssociateAccept(AssociateAc associateAc)
 {
     // Do nothing.
 }