Ejemplo n.º 1
0
        protected override void Execute()
        {
            // loop through all associations
            // Get all kind of DICOM messages from the sniffer file stream.
            DvtkData.Message            message                 = null;
            DvtkData.Dimse.DicomMessage lastMessage             = null;
            DvtkData.Dul.AcceptedPresentationContextList accPCs = null;
            ReceivedMsgReturnCode retcode = ReceivedMsgReturnCode.Failure;

            retcode = dvtkSnifferSession.ReceiveMessage(out message);
            try
            {
                while ((retcode == ReceivedMsgReturnCode.Success) && (message != null))
                {
                    // DicomMessage needs to be validated against a definition file and VR.
                    ValidationControlFlags validationFlags = ValidationControlFlags.None;
                    validationFlags |= ValidationControlFlags.UseDefinitions;
                    validationFlags |= ValidationControlFlags.UseValueRepresentations;

                    if (message is DvtkData.Dul.DulMessage)
                    {
                        //Extract Calling/Called AE Title from received message and save is to
                        // Dvtk Script session
                        if (message is DvtkData.Dul.A_ASSOCIATE_RQ)
                        {
                            DvtkData.Dul.A_ASSOCIATE_RQ assocReq = (DvtkData.Dul.A_ASSOCIATE_RQ)message;
                            Options.DvtkScriptSession.DvtSystemSettings.AeTitle = assocReq.CalledAETitle;
                            Options.DvtkScriptSession.SutSystemSettings.AeTitle = assocReq.CallingAETitle;
                        }

                        if (message is DvtkData.Dul.A_ASSOCIATE_AC)
                        {
                            DvtkData.Dul.A_ASSOCIATE_AC assocAcc = (DvtkData.Dul.A_ASSOCIATE_AC)message;
                            Options.DvtkScriptSession.DvtSystemSettings.AeTitle = assocAcc.CallingAETitle;
                            Options.DvtkScriptSession.SutSystemSettings.AeTitle = assocAcc.CalledAETitle;
                            accPCs = assocAcc.PresentationContexts;
                        }

                        Options.DvtkScriptSession.Validate(message as DvtkData.Dul.DulMessage, null, validationFlags);
                    }
                    else
                    {
                        DvtkData.Dimse.DicomMessage dimseMsg = (DvtkData.Dimse.DicomMessage)message;
                        if (dimseMsg.CommandField == DvtkData.Dimse.DimseCommand.CFINDRQ)
                        {
                            lastMessage = dimseMsg;
                        }

                        foreach (DvtkData.Dul.AcceptedPresentationContext acc in accPCs)
                        {
                            if ((acc.Result == 0) && (acc.ID == dimseMsg.EncodedPresentationContextID))
                            {
                                if (acc.TransferSyntax != DvtkData.Dul.TransferSyntax.Implicit_VR_Little_Endian)
                                {
                                    Options.DvtkScriptSession.IsDataTransferExplicit = true;
                                }
                                else
                                {
                                    Options.DvtkScriptSession.IsDataTransferExplicit = false;
                                }
                                break;
                            }
                        }

                        if ((dimseMsg.CommandField == DvtkData.Dimse.DimseCommand.CFINDRSP) && (lastMessage != null))
                        {
                            Options.DvtkScriptSession.Validate(dimseMsg, null, lastMessage, validationFlags);
                        }
                        else
                        {
                            Options.DvtkScriptSession.Validate(dimseMsg, null, validationFlags);
                        }
                    }

                    message = null;
                    retcode = dvtkSnifferSession.ReceiveMessage(out message);
                    if ((retcode == ReceivedMsgReturnCode.IncompleteByteStream) && (message == null))
                    {
                        string msg = string.Format("Incomplete byte stream, unable to perform further validation, see {0} for detail logging in {1} directory.", (associationName + ".log"), this.Options.ResultsDirectory);
                        WriteHtmlInformation("<b><br />");
                        WriteInformation(msg);
                        WriteHtmlInformation("</b><br />");
                    }
                }
            }
            catch (Exception except)
            {
                string msg = string.Format("Validation error: {0}\n", except.Message);
                MessageBox.Show(msg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            //again set the original directory
            dvtkSnifferSession.DataDirectory = orgDataDir;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Sends an A-ASSOCIATE-RQ.
        /// </summary>
        /// <param name="presentationContexts">One or more PresentationContext objects.</param>
        /// <returns>The sent A-ASSOCIATE-RQ</returns>
        /// <exception cref="System.Exception">
        ///	One or more of the supplied presentation contexts is an A_ASSOCIATE_AC presentation 
        /// context or sending of the A-ASSOCIATE-RQ fails.
        /// </exception> 
        /// <example>
        ///		<b>VB.NET</b>
        ///		<code>
        /// 			<include file='Doc\VisualBasicExamples.xml' path='Examples/Example[@name="IncludesDicomThreadScu"]' />
        /// 			<include file='Doc\VisualBasicExamples.xml' path='Examples/Example[@name="DicomThreadScu"]' />
        /// 			<include file='Doc\VisualBasicExamples.xml' path='Examples/Example[@name="Main"]' />		
        ///		</code>
        /// </example>		
        protected internal AssociateRq SendAssociateRq(params PresentationContext[] presentationContexts)
        {
            AssociateRq associateRq = null;

            // Create a DvtkData ASSOCIATE request and set default values.
            DvtkData.Dul.A_ASSOCIATE_RQ dvtkDataAssociateRq = new DvtkData.Dul.A_ASSOCIATE_RQ();
            dvtkDataAssociateRq.CallingAETitle = Options.LocalAeTitle;
            dvtkDataAssociateRq.CalledAETitle = Options.RemoteAeTitle;
            dvtkDataAssociateRq.UserInformation.MaximumLength.MaximumLengthReceived = Options.LocalMaximumLength;
            dvtkDataAssociateRq.UserInformation.ImplementationClassUid.UID = Options.LocalImplementationClassUid;
            dvtkDataAssociateRq.UserInformation.ImplementationVersionName.Name = Options.LocalImplementationVersionName;

            // Parse all parameters.
            foreach (PresentationContext presentationContext in presentationContexts)
            {
                if (!presentationContext.IsForAssociateRequest)
                {
                    throw new System.Exception("Error while interpreting parameters for PresentationContext");
                }

                DvtkData.Dul.RequestedPresentationContext requestedPresentationContext = new DvtkData.Dul.RequestedPresentationContext();

                requestedPresentationContext.AbstractSyntax = new DvtkData.Dul.AbstractSyntax(presentationContext.AbstractSyntax);

                foreach (String transferSyntax in presentationContext.TransferSyntaxes)
                {
                    requestedPresentationContext.AddTransferSyntaxes(new DvtkData.Dul.TransferSyntax(transferSyntax));
                }

                dvtkDataAssociateRq.AddPresentationContexts(requestedPresentationContext);
            }

            associateRq = new AssociateRq(dvtkDataAssociateRq);

            SendMessage(associateRq);

            hasOpenConnection = true;

            return (associateRq);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Constructor to encapsulate an existing DvtkData A_ASSOCIATE_RQ.
 /// </summary>
 /// <param name="dvtkDataAssociateRq">The encapsulated DvtkData A_ASSOCIATE_RQ</param>
 internal AssociateRq(DvtkData.Dul.A_ASSOCIATE_RQ dvtkDataAssociateRq) : base(dvtkDataAssociateRq)
 {
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Send a A-ASSOCIATE-RQ.
        /// </summary>
        /// <param name="presentationContexts">One or more PresentationContext objects.</param>
        /// <returns>The A-ASSOCIATE-RQ</returns>
        public AssociateRq SendAssociateRq(params PresentationContext[] presentationContexts)
        {
            // Start Interface logging.
            // InterfaceLogging.Start(this);

            AssociateRq associateRq = null;

            // Create a DvtkData ASSOCIATE request and set default values.
            DvtkData.Dul.A_ASSOCIATE_RQ dvtkDataAssociateRq  = new DvtkData.Dul.A_ASSOCIATE_RQ();
            dvtkDataAssociateRq.CallingAETitle = DvtkScriptSession.DvtSystemSettings.AeTitle;
            dvtkDataAssociateRq.CalledAETitle = DvtkScriptSession.SutSystemSettings.AeTitle;
            dvtkDataAssociateRq.UserInformation.MaximumLength.MaximumLengthReceived = Convert.ToUInt32(16384);
            dvtkDataAssociateRq.UserInformation.ImplementationClassUid.UID = "100.118.116.2003.1.4";

            // Parse all parameters.
            foreach(PresentationContext presentationContext in presentationContexts)
            {
                if (!presentationContext.InterpretAsPcForAssociateRq())
                {
                    DvtkHighLevelInterfaceException.Throw("Error while interpreting parameters for PresentationContext");
                }

                DvtkData.Dul.RequestedPresentationContext requestedPresentationContext = new DvtkData.Dul.RequestedPresentationContext();

                requestedPresentationContext.AbstractSyntax = new DvtkData.Dul.AbstractSyntax(presentationContext.SopClass);

                foreach (String transferSyntax in presentationContext.TransferSyntaxes)
                {
                    requestedPresentationContext.AddTransferSyntaxes(new DvtkData.Dul.TransferSyntax(transferSyntax));
                }

                dvtkDataAssociateRq.AddPresentationContexts(requestedPresentationContext);
            }

            Dvtk.Sessions.SendReturnCode sendReturnCode = DvtkScriptSession.Send(dvtkDataAssociateRq);

            if (sendReturnCode != Dvtk.Sessions.SendReturnCode.Success)
            {
                DvtkHighLevelInterfaceException.Throw("Error sending associate request (" + sendReturnCode.ToString() + ")");
            }
            else
            {
                associateRq = new AssociateRq(dvtkDataAssociateRq);

                associateRq.IsSend = true;
                ThreadManager.DataWarehouse.AddMessage(this, associateRq);
            }

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

            return(associateRq);
        }