C#
VB
WinRT C#
C++
Specifies the reason for the Association rejection.
public enum DicomAssociateRejectReasonType Public Enum DicomAssociateRejectReasonType
public enum DicomAssociateRejectReasonType Leadtools.Dicom.DicomAssociateRejectReasonType = function() { };Leadtools.Dicom.DicomAssociateRejectReasonType.prototype = {<br/>LeadtoolsMemberMarker(replace me)};
public enum class DicomAssociateRejectReasonType Members
| Value | Member | Description |
|---|---|---|
| 1 | Congestion | Temporary congestion. |
| 1 | Unknown | Unknown. |
| 2 | Application | Application Context Name not supported. |
| 2 | Limit | Local client limit exceeded. |
| 2 | Version | Protocol version not supported. |
| 3 | Calling | Calling AE Title not recognized. |
| 7 | Called | Called AE Title not recognized. |
using Leadtools;using Leadtools.Dicom;[StructLayout(LayoutKind.Sequential)]public struct MSG{public IntPtr hwnd;public uint message;public IntPtr wParam;public IntPtr lParam;public uint time;public System.Drawing.Point p;}public enum WaitReturn{Complete,Timeout,}class Utils{[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]static extern bool PeekMessage(out MSG lpMsg, IntPtr hWnd,uint wMsgFilterMin, uint wMsgFilterMax,uint wRemoveMsg);[DllImport("user32.dll")]static extern bool TranslateMessage([In] ref MSG lpMsg);[DllImport("user32.dll")]static extern IntPtr DispatchMessage([In] ref MSG lpmsg);const uint PM_REMOVE = 1;public static WaitReturn WaitForComplete(double mill, WaitHandle wh){TimeSpan goal = new TimeSpan(DateTime.Now.AddMilliseconds(mill).Ticks);do{MSG msg = new MSG();if (PeekMessage(out msg, IntPtr.Zero, 0, 0, PM_REMOVE)){TranslateMessage(ref msg);DispatchMessage(ref msg);}if (wh.WaitOne(new TimeSpan(0, 0, 0), false)){return WaitReturn.Complete;}if (goal.CompareTo(new TimeSpan(DateTime.Now.Ticks)) < 0){return WaitReturn.Timeout;}} while (true);}}class Client : DicomNet{DicomExceptionCode _LastError = DicomExceptionCode.Success;AutoResetEvent waitEvent = new AutoResetEvent(false);public Client(): base(null, DicomNetSecurityeMode.None){}public DicomExceptionCode LastError{get{return _LastError;}}public bool Wait(){WaitReturn ret;_LastError = DicomExceptionCode.Success;ret = Utils.WaitForComplete((5 * 60) * 1000, waitEvent);return (ret == WaitReturn.Complete);}protected override void OnConnect(DicomExceptionCode error){_LastError = error;waitEvent.Set();}protected override void OnReceiveAssociateAccept(DicomAssociate association){waitEvent.Set();}protected override void OnReceiveAssociateReject(DicomAssociateRejectResultType result,DicomAssociateRejectSourceType source,DicomAssociateRejectReasonType reason){Debug.Assert(result == DicomAssociateRejectResultType.Permanent, "Result should be: " + DicomAssociateRejectResultType.Permanent.ToString());Debug.Assert(source == DicomAssociateRejectSourceType.User, "Source should be: " + DicomAssociateRejectSourceType.User.ToString());Debug.Assert(reason == DicomAssociateRejectReasonType.Limit, " Reason should be: " + DicomAssociateRejectReasonType.Limit.ToString());waitEvent.Set();}protected override void OnReceiveReleaseResponse(){waitEvent.Set();}}class ServerConnection : DicomNet{public bool Fail = false;public ServerConnection(): base(null, DicomNetSecurityeMode.None){}protected override void OnReceiveAssociateRequest(DicomAssociate association){DicomAssociate retAssociation = new DicomAssociate(false);if (Fail){SendAssociateReject(DicomAssociateRejectResultType.Permanent,DicomAssociateRejectSourceType.User,DicomAssociateRejectReasonType.Limit);return;}Debug.Assert(association.Called == "ServerTest", "Called AETitle should be ServerTest");Debug.Assert(association.Calling == "ClientTest", "Calling AETitle should be ClientTest");Debug.Assert(association.ImplementClass == "1.2.840.114257.1", "Implementation class should be 1.2.840.114257.1");Debug.Assert(association.ImplementationVersionName == "1", "Implementation version should be 1");Debug.Assert(association.MaxLength == 0x100000, "Max length should be 0x100000");Debug.Assert(association.GetAbstract(1) == DicomUidType.VerificationClass, "Presentation index 1 should be " + DicomUidType.VerificationClass);Debug.Assert(association.GetTransfer(1, 0) == DicomUidType.ImplicitVRLittleEndian, "Abstract Syntax (1,0) should be " + DicomUidType.ImplicitVRLittleEndian);//// Build our Association Accept//retAssociation.Called = association.Called;retAssociation.Calling = association.Calling;retAssociation.ImplementClass = association.ImplementClass;retAssociation.ImplementationVersionName = association.ImplementationVersionName;for (int x = 0; x < association.PresentationContextCount; x++){byte id = association.GetPresentationContextID(x);string abSyntax = association.GetAbstract(id);string trSyntax = DicomUidType.ImplicitVRLittleEndian;retAssociation.AddPresentationContext(id, 0, abSyntax);if (association.GetTransferCount(id) > 0){trSyntax = association.GetTransfer(id, 0);}//Over here we can call retAssociation.SetAbstract to update the abstract//syntax for any of the sresentation contextsretAssociation.AddTransfer(id, trSyntax);if (retAssociation.GetTransferCount(id) == 0){//// Presentation id doesn't have any abstract// syntaxes therefore we will reject it.//retAssociation.SetResult(id, DicomAssociateAcceptResultType.AbstractSyntax);Debug.Assert(retAssociation.GetResult(id) == DicomAssociateAcceptResultType.AbstractSyntax, "Result should be: " + DicomAssociateAcceptResultType.AbstractSyntax.ToString());}// We can also call in here SetPresentationContextID if we would like// to change some of the presentation IDs// And SetTransfer to update the Transfer Syntax for a certian// presentation context.}SendAssociateAccept(retAssociation);}protected override void OnReceiveReleaseRequest(){SendReleaseResponse();}};class Server : DicomNet{ServerConnection client;public Server(): base(null, DicomNetSecurityeMode.None){}public bool Fail{get{if (client == null)return false;return client.Fail;}set{if (client != null){client.Fail = value;}}}protected override void OnAccept(DicomExceptionCode error){client = new ServerConnection();Accept(client);}}public void SendAssociateRequestSample(){DicomEngine.Startup();DicomNet.Startup();using (Server server = new Server()){using (Client client = new Client()){//// Connect to server//server.Listen("127.0.0.1", 104, 1); // start serverclient.Connect(null, 1000, "127.0.0.1", 104); // connect to serverif (!client.Wait()) // wait for connection to finish{Debug.Fail("Connection timed out");}Debug.Assert(client.LastError == DicomExceptionCode.Success, "Connection failed");Debug.Assert(client.IsConnected(), "Client not connected");//// Send associate request//DicomAssociate associate = new DicomAssociate(true);associate.Called = "ServerTest";associate.Calling = "ClientTest";associate.ImplementClass = "1.2.840.114257.1";associate.ImplementationVersionName = "1";associate.MaxLength = 0x100000;//We can also call in here associate.Default() to initialize//the association with default values.associate.AddPresentationContext(1, 0, DicomUidType.VerificationClass);associate.AddTransfer(1, DicomUidType.ImplicitVRLittleEndian);client.SendAssociateRequest(associate);if (!client.Wait()) // wait for connection to finish{Debug.Fail("SendAssociateRequest timed out");}//// SendReleaseRequest//client.SendReleaseRequest();if (!client.Wait()) // wait for connection to finish{Debug.Fail("SendAssociateRequest timed out");}//// Force association to send SendAssociateReject. This is for// testing purposes only. Only one association should be sent// per connection.//server.Fail = true;client.SendAssociateRequest(associate);if (!client.Wait()) // wait for connection to finish{Debug.Fail("SendAssociateRequest timed out");}server.Fail = false;//// SendReleaseRequest//client.SendReleaseRequest();if (!client.Wait()) // wait for connection to finish{Debug.Fail("SendAssociateRequest timed out");}client.CloseForced(true);}server.CloseForced(true);}DicomEngine.Shutdown();DicomNet.Shutdown();}
Imports LeadtoolsImports Leadtools.Dicom<StructLayout(LayoutKind.Sequential)>Public Structure MSGPublic hwnd As IntPtrPublic message As UIntegerPublic wParam As IntPtrPublic lParam As IntPtrPublic time As UIntegerPublic p As System.Drawing.PointEnd StructurePublic Enum WaitReturnCompleteTimeoutEnd EnumPrivate Class Utils<DllImport("user32.dll")>Shared Function PeekMessage(<System.Runtime.InteropServices.Out()> ByRef lpMsg As MSG, ByVal hWnd As IntPtr, ByVal wMsgFilterMin As UInteger,ByVal wMsgFilterMax As UInteger, ByVal wRemoveMsg As UInteger) As <MarshalAs(UnmanagedType.Bool)> BooleanEnd Function<DllImport("user32.dll")>Shared Function TranslateMessage(ByRef lpMsg As MSG) As BooleanEnd Function<DllImport("user32.dll")>Shared Function DispatchMessage(ByRef lpmsg As MSG) As IntPtrEnd FunctionPrivate Const PM_REMOVE As UInteger = 1Public Shared Function WaitForComplete(ByVal mill As Double, ByVal wh As WaitHandle) As WaitReturnDim goal As TimeSpan = New TimeSpan(DateTime.Now.AddMilliseconds(mill).Ticks)DoDim msg As MSG = New MSG()If PeekMessage(msg, IntPtr.Zero, 0, 0, PM_REMOVE) ThenTranslateMessage(msg)DispatchMessage(msg)End IfIf wh.WaitOne(New TimeSpan(0, 0, 0), False) ThenReturn WaitReturn.CompleteEnd IfIf goal.CompareTo(New TimeSpan(DateTime.Now.Ticks)) < 0 ThenReturn WaitReturn.TimeoutEnd IfLoop While TrueEnd FunctionEnd ClassPrivate Class Client : Inherits DicomNetPrivate _LastError As DicomExceptionCode = DicomExceptionCode.SuccessPrivate waitEvent As AutoResetEvent = New AutoResetEvent(False)Public Sub New()MyBase.New(Nothing, DicomNetSecurityeMode.None)End SubPublic ReadOnly Property LastError() As DicomExceptionCodeGetReturn _LastErrorEnd GetEnd PropertyPublic Function Wait() As BooleanDim ret As WaitReturn_LastError = DicomExceptionCode.Successret = Utils.WaitForComplete((5 * 60) * 1000, waitEvent)Return (ret = WaitReturn.Complete)End FunctionProtected Overrides Sub OnConnect(ByVal [error] As DicomExceptionCode)_LastError = [error]waitEvent.Set()End SubProtected Overrides Sub OnReceiveAssociateAccept(ByVal association As DicomAssociate)waitEvent.Set()End SubProtected Overrides Sub OnReceiveAssociateReject(ByVal result As DicomAssociateRejectResultType, ByVal source As DicomAssociateRejectSourceType,ByVal reason As DicomAssociateRejectReasonType)Debug.Assert(result = DicomAssociateRejectResultType.Permanent, "Result should be: " & DicomAssociateRejectResultType.Permanent.ToString())Debug.Assert(source = DicomAssociateRejectSourceType.User, "Source should be: " & DicomAssociateRejectSourceType.User.ToString())Debug.Assert(reason = DicomAssociateRejectReasonType.Limit, " Reason should be: " & DicomAssociateRejectReasonType.Limit.ToString())waitEvent.Set()End SubProtected Overrides Sub OnReceiveReleaseResponse()waitEvent.Set()End SubEnd ClassPrivate Class ServerConnection : Inherits DicomNetPublic Fail As Boolean = FalsePublic Sub New()MyBase.New(Nothing, DicomNetSecurityeMode.None)End SubProtected Overrides Sub OnReceiveAssociateRequest(ByVal association As DicomAssociate)Dim retAssociation As DicomAssociate = New DicomAssociate(False)If Fail ThenSendAssociateReject(DicomAssociateRejectResultType.Permanent, DicomAssociateRejectSourceType.User, DicomAssociateRejectReasonType.Limit)ReturnEnd IfDebug.Assert(association.Called = "ServerTest", "Called AETitle should be ServerTest")Debug.Assert(association.Calling = "ClientTest", "Calling AETitle should be ClientTest")Debug.Assert(association.ImplementClass = "1.2.840.114257.1", "Implementation class should be 1.2.840.114257.1")Debug.Assert(association.ImplementationVersionName = "1", "Implementation version should be 1")Debug.Assert(association.MaxLength = &H100000, "Max length should be 0x100000")Debug.Assert(association.GetAbstract(1) = DicomUidType.VerificationClass, "Presentation index 1 should be " & DicomUidType.VerificationClass)Debug.Assert(association.GetTransfer(1, 0) = DicomUidType.ImplicitVRLittleEndian, "Abstract Syntax (1,0) should be " & DicomUidType.ImplicitVRLittleEndian)'' Build our Association Accept'retAssociation.Called = association.CalledretAssociation.Calling = association.CallingretAssociation.ImplementClass = association.ImplementClassretAssociation.ImplementationVersionName = association.ImplementationVersionNameDim x As Integer = 0Do While x < association.PresentationContextCountDim id As Byte = association.GetPresentationContextID(x)Dim abSyntax As String = association.GetAbstract(id)Dim trSyntax As String = DicomUidType.ImplicitVRLittleEndianretAssociation.AddPresentationContext(id, 0, abSyntax)If association.GetTransferCount(id) > 0 ThentrSyntax = association.GetTransfer(id, 0)End If'Over here we can call retAssociation.SetAbstract to update the abstract'syntax for any of the sresentation contextsretAssociation.AddTransfer(id, trSyntax)If retAssociation.GetTransferCount(id) = 0 Then'Presentation id doesn't have any abstract'syntaxes therefore we will reject it.retAssociation.SetResult(id, DicomAssociateAcceptResultType.AbstractSyntax)Debug.Assert(retAssociation.GetResult(id) = DicomAssociateAcceptResultType.AbstractSyntax,"Result should be: " + DicomAssociateAcceptResultType.AbstractSyntax.ToString())End If' We can also call in here SetPresentationContextID if we would like' to change some of the presentation IDs' And SetTransfer to update the Transfer Syntax for a certian' presentation context.x += 1LoopSendAssociateAccept(retAssociation)End SubProtected Overrides Sub OnReceiveReleaseRequest()SendReleaseResponse()End SubEnd ClassPrivate Class Server : Inherits DicomNetPrivate client As ServerConnectionPublic Sub New()MyBase.New(Nothing, DicomNetSecurityeMode.None)End SubPublic Property Fail() As BooleanGetIf client Is Nothing ThenReturn FalseEnd IfReturn client.FailEnd GetSet(ByVal value As Boolean)If Not client Is Nothing Thenclient.Fail = valueEnd IfEnd SetEnd PropertyProtected Overrides Sub OnAccept(ByVal [error] As DicomExceptionCode)client = New ServerConnection()Accept(client)End SubEnd ClassPublic Sub SendAssociateRequestSample()DicomEngine.Startup()DicomNet.Startup()Using server As Server = New Server()Using client As Client = New Client()'' Connect to server'server.Listen("127.0.0.1", 104, 1) ' start serverclient.Connect(Nothing, 1000, "127.0.0.1", 104) ' connect to serverIf (Not client.Wait()) Then ' wait for connection to finishDebug.Fail("Connection timed out")End IfDebug.Assert(client.LastError = DicomExceptionCode.Success, "Connection failed")Debug.Assert(client.IsConnected(), "Client not connected")'' Send associate request'Dim associate As DicomAssociate = New DicomAssociate(True)associate.Called = "ServerTest"associate.Calling = "ClientTest"associate.ImplementClass = "1.2.840.114257.1"associate.ImplementationVersionName = "1"associate.MaxLength = &H100000'We can also call in here associate.Default() to initialize'the association with default values.associate.AddPresentationContext(1, 0, DicomUidType.VerificationClass)associate.AddTransfer(1, DicomUidType.ImplicitVRLittleEndian)client.SendAssociateRequest(associate)If (Not client.Wait()) Then ' wait for connection to finishDebug.Fail("SendAssociateRequest timed out")End If'' SendReleaseRequest'client.SendReleaseRequest()If (Not client.Wait()) Then ' wait for connection to finishDebug.Fail("SendAssociateRequest timed out")End If'' Force association to send SendAssociateReject. This is for' testing purposes only. Only one association should be sent' per connection.'server.Fail = Trueclient.SendAssociateRequest(associate)If (Not client.Wait()) Then ' wait for connection to finishDebug.Fail("SendAssociateRequest timed out")End Ifserver.Fail = False'' SendReleaseRequest'client.SendReleaseRequest()If (Not client.Wait()) Then ' wait for connection to finishDebug.Fail("SendAssociateRequest timed out")End Ifclient.CloseForced(True)End Usingserver.CloseForced(True)End UsingDicomEngine.Shutdown()DicomNet.Shutdown()End Sub
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
