Class ProbeCapability
- java.lang.Object
-
- com.pixelmed.network.ProbeCapability
-
- All Implemented Interfaces:
java.lang.Runnable
public class ProbeCapability extends java.lang.Object implements java.lang.Runnable
This class provides utilities to probe the capabilities of potential DICOM Application Entities, used for example to maintain a cache of potential C-MOVE targets.
The constructors perform the probe and may be used to determine the capabilities of an AE listening on a specified port, or to probe for plausible ports.
The Verification SOP Class must be supported by the AE being tested for it to be detected.
The supported SOP Classes are tested by proposing associations with the default transfer syntax.
The main method may be useful in its own right as a command line utility.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
ProbeCapability.AETGenerator
protected class
ProbeCapability.StringPermutationGenerator
-
Field Summary
Fields Modifier and Type Field Description protected static char[]
upperCase
protected static char[]
upperCaseNumericUnderscore
-
Constructor Summary
Constructors Constructor Description ProbeCapability(java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle)
Establish an association to the specified AE and using the specified port, and probe its capabilities.ProbeCapability(java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle, int debugLevel)
Establish an association to the specified AE and using the specified port, and probe its capabilities.ProbeCapability(java.lang.String hostname, java.lang.String callingAETitle)
Establish an association to the specified host, find a suitable port and AE Title, and probe its capabilities.ProbeCapability(java.lang.String hostname, java.lang.String callingAETitle, int debugLevel)
Establish an association to the specified host, find a suitable port and AE Title, and probe its capabilities.ProbeCapability(java.lang.String hostname, java.lang.String calledAETitle, java.lang.String callingAETitle)
Establish an association to the specified AE, find a suitable port, and probe its capabilities.ProbeCapability(java.lang.String hostname, java.lang.String calledAETitle, java.lang.String callingAETitle, int debugLevel)
Establish an association to the specified AE, find a suitable port, and probe its capabilities.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static boolean
canConnectToPort(java.lang.String hostAddress, int port)
Can a connection to the specified address and port be established?static boolean
canConnectToPort(java.lang.String hostAddress, int port, int timeout)
Can a connection to the specified address and port be established?static java.lang.String
describeIPAddress(java.net.InetAddress address)
java.lang.String
getCalledAETitle()
Get the Called AET.java.lang.String
getHostname()
Get the hostname or IP address.int
getPort()
Get the port.PresentationAddress
getPresentationAddress()
Get the Presentation Address.java.lang.String
getQueryModel()
Get the supported query model.java.util.List
getSupportedQuerySOPClasses()
Get the supported Query SOP Classes.java.util.List
getSupportedRetrieveWithGetSOPClasses()
Get the supported Retrieve with Get SOP Classes.java.util.List
getSupportedRetrieveWithMoveSOPClasses()
Get the supported Retrieve with Move SOP Classes.java.util.List
getSupportedStorageSOPClasses()
Get the supported Storage SOP Classes.boolean
isDone()
Has thread finished probing ?boolean
isQuerySupported()
Are any Query SOP Classes supported ?boolean
isRetrieveWithGetSupported()
Are any Retrieve with Get SOP Classes supported ?boolean
isRetrieveWithMoveSupported()
Are any Retrieve with Move SOP Classes supported ?boolean
isStorageSupported()
Are any Storage SOP Classes supported ?static void
main(java.lang.String[] arg)
For testing, establish an association to the specified AE, find a suitable port if necessary, and probe its capabilities.static void
probeRangeAllHostsOnLocalSubnet(java.lang.String callingAETitle)
static java.util.List
probeSupportedSOPClasses(java.lang.String[] arrayOfSOPClasses, java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle)
Establish an association to the specified AE, and probe its capabilities with respect to those SOP Classes supported.static java.util.List
probeSupportedSOPClasses(java.lang.String[] arrayOfSOPClasses, java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle, int debugLevel)
Establish an association to the specified AE, and probe its capabilities with respect to those SOP Classes supported.void
run()
Actually do the work to probe for the requested information.void
runUntilDone()
Actually do the work to probe for the requested information, and do not come back until done.java.lang.String
toString()
Return a String representing this object's value.
-
-
-
Constructor Detail
-
ProbeCapability
public ProbeCapability(java.lang.String hostname, java.lang.String callingAETitle, int debugLevel) throws DicomNetworkException
Establish an association to the specified host, find a suitable port and AE Title, and probe its capabilities.
The parameters are established but the work is deferred until run() is called.
- Parameters:
hostname
- their hostname or IP addresscallingAETitle
- our AE TitledebugLevel
- ignored- Throws:
DicomNetworkException
-
ProbeCapability
public ProbeCapability(java.lang.String hostname, java.lang.String callingAETitle) throws DicomNetworkException
Establish an association to the specified host, find a suitable port and AE Title, and probe its capabilities.
The parameters are established but the work is deferred until run() is called.
- Parameters:
hostname
- their hostname or IP addresscallingAETitle
- our AE Title- Throws:
DicomNetworkException
-
ProbeCapability
public ProbeCapability(java.lang.String hostname, java.lang.String calledAETitle, java.lang.String callingAETitle, int debugLevel) throws DicomNetworkException
Establish an association to the specified AE, find a suitable port, and probe its capabilities.
The parameters are established but the work is deferred until run() is called.
- Parameters:
hostname
- their hostname or IP addresscalledAETitle
- their AE TitlecallingAETitle
- our AE TitledebugLevel
- ignored- Throws:
DicomNetworkException
-
ProbeCapability
public ProbeCapability(java.lang.String hostname, java.lang.String calledAETitle, java.lang.String callingAETitle) throws DicomNetworkException
Establish an association to the specified AE, find a suitable port, and probe its capabilities.
The parameters are established but the work is deferred until run() is called.
- Parameters:
hostname
- their hostname or IP addresscalledAETitle
- their AE TitlecallingAETitle
- our AE Title- Throws:
DicomNetworkException
-
ProbeCapability
public ProbeCapability(java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle, int debugLevel)
Establish an association to the specified AE and using the specified port, and probe its capabilities.
The parameters are established but the work is deferred until run() is called.
- Parameters:
hostname
- their hostname or IP addressport
- their portcalledAETitle
- their AE TitlecallingAETitle
- our AE TitledebugLevel
- ignored
-
ProbeCapability
public ProbeCapability(java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle)
Establish an association to the specified AE and using the specified port, and probe its capabilities.
The parameters are established but the work is deferred until run() is called.
- Parameters:
hostname
- their hostname or IP addressport
- their portcalledAETitle
- their AE TitlecallingAETitle
- our AE Title
-
-
Method Detail
-
getCalledAETitle
public java.lang.String getCalledAETitle()
Get the Called AET.
- Returns:
- the Called AET
-
getPresentationAddress
public PresentationAddress getPresentationAddress()
Get the Presentation Address.
- Returns:
- the Presentation Address
-
getHostname
public java.lang.String getHostname()
Get the hostname or IP address.
- Returns:
- the hostname or IP address
-
getPort
public int getPort()
Get the port.
- Returns:
- the port
-
getSupportedStorageSOPClasses
public java.util.List getSupportedStorageSOPClasses()
Get the supported Storage SOP Classes.
- Returns:
- a list of the supported Storage SOP Class UID strings
-
isStorageSupported
public boolean isStorageSupported()
Are any Storage SOP Classes supported ?
- Returns:
- true if any Storage SOP Classes are supported
-
getSupportedQuerySOPClasses
public java.util.List getSupportedQuerySOPClasses()
Get the supported Query SOP Classes.
- Returns:
- a list of the supported Query SOP Class UID strings
-
isQuerySupported
public boolean isQuerySupported()
Are any Query SOP Classes supported ?
- Returns:
- true if any Query SOP Classes are supported
-
getSupportedRetrieveWithMoveSOPClasses
public java.util.List getSupportedRetrieveWithMoveSOPClasses()
Get the supported Retrieve with Move SOP Classes.
- Returns:
- a list of the supported Retrieve with Move SOP Class UID strings
-
isRetrieveWithMoveSupported
public boolean isRetrieveWithMoveSupported()
Are any Retrieve with Move SOP Classes supported ?
- Returns:
- true if any Retrieve with Move SOP Classes are supported
-
getSupportedRetrieveWithGetSOPClasses
public java.util.List getSupportedRetrieveWithGetSOPClasses()
Get the supported Retrieve with Get SOP Classes.
- Returns:
- a list of the supported Retrieve with Get SOP Class UID strings
-
isRetrieveWithGetSupported
public boolean isRetrieveWithGetSupported()
Are any Retrieve with Get SOP Classes supported ?
- Returns:
- true if any Retrieve with Get SOP Classes are supported
-
getQueryModel
public java.lang.String getQueryModel()
Get the supported query model.
Note that only a single model is returned, even if more than one is supported; in the later case, study root is preferred over patient root over patient/study only.
Further, the query model of the query (find) is returned, in preference to checking the model of the retrieve (move or get), which is only done of no find SOP classes are supported.
- Returns:
- the (preferred) query model supported; one of
NetworkApplicationProperties.StudyRootQueryModel
orNetworkApplicationProperties.PatientRootQueryModel
orNetworkApplicationProperties.PatientStudyOnlyQueryModel
.
-
isDone
public boolean isDone()
Has thread finished probing ?
- Returns:
- true if probe has finished
-
probeSupportedSOPClasses
public static java.util.List probeSupportedSOPClasses(java.lang.String[] arrayOfSOPClasses, java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle, int debugLevel) throws DicomNetworkException, java.io.IOException
Establish an association to the specified AE, and probe its capabilities with respect to those SOP Classes supported.
- Parameters:
arrayOfSOPClasses
- the SOP Classes to test forhostname
- their hostname or IP addressport
- their portcalledAETitle
- their AE TitlecallingAETitle
- our AE TitledebugLevel
- ignored- Returns:
- a list of Strings each being a SOP Class that is supported, or an empty list
- Throws:
DicomNetworkException
java.io.IOException
-
probeSupportedSOPClasses
public static java.util.List probeSupportedSOPClasses(java.lang.String[] arrayOfSOPClasses, java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle) throws DicomNetworkException, java.io.IOException
Establish an association to the specified AE, and probe its capabilities with respect to those SOP Classes supported.
- Parameters:
arrayOfSOPClasses
- the SOP Classes to test forhostname
- their hostname or IP addressport
- their portcalledAETitle
- their AE TitlecallingAETitle
- our AE Title- Returns:
- a list of Strings each being a SOP Class that is supported, or an empty list
- Throws:
DicomNetworkException
java.io.IOException
-
run
public void run()
Actually do the work to probe for the requested information.
- Specified by:
run
in interfacejava.lang.Runnable
-
runUntilDone
public void runUntilDone() throws java.lang.InterruptedException
Actually do the work to probe for the requested information, and do not come back until done.
- Throws:
java.lang.InterruptedException
-
toString
public java.lang.String toString()
Return a String representing this object's value.
- Overrides:
toString
in classjava.lang.Object
- Returns:
- a string representation of the value of this object
-
canConnectToPort
public static boolean canConnectToPort(java.lang.String hostAddress, int port)
Can a connection to the specified address and port be established?
Will block until connected or an error occurs.
- Parameters:
hostAddress
-port
-- Returns:
- true if can connect
-
canConnectToPort
public static boolean canConnectToPort(java.lang.String hostAddress, int port, int timeout)
Can a connection to the specified address and port be established?
- Parameters:
hostAddress
-port
-timeout
- in milliseconds, or zero for no timeout (will block until connected or an error occurs)- Returns:
- true if can connect within specified timeout period
-
probeRangeAllHostsOnLocalSubnet
public static void probeRangeAllHostsOnLocalSubnet(java.lang.String callingAETitle)
-
describeIPAddress
public static java.lang.String describeIPAddress(java.net.InetAddress address)
-
main
public static void main(java.lang.String[] arg)
For testing, establish an association to the specified AE, find a suitable port if necessary, and probe its capabilities.
- Parameters:
arg
- array of three or four values - their hostname, optionally their port, optionally their AE Title, our AE Title
-
-