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; }
/// <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); }
/// <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) { }
/// <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); }