Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def send_request(self):
"""Send an A-ASSOCIATE (request) to the peer."""
# The following parameters must be set for a request primitive
# (* sent in A-ASSOCIATE-RQ PDU)
# Application Context Name*
# Calling AE Title*
# Called AE Title*
# UserInformation*
# Maximum PDV Length*
# Implementation Class UID*
# Calling Presentation Address
# Called Presentation Address
# Presentation Context Definition List*
primitive = A_ASSOCIATE()
# DICOM Application Context Name, see PS3.7 Annex A.2.1
primitive.application_context_name = APPLICATION_CONTEXT_NAME
# Calling AE Title is the source DICOM AE title
primitive.calling_ae_title = self.requestor.ae_title
# Called AE Title is the destination DICOM AE title
primitive.called_ae_title = self.acceptor.ae_title
# The TCP/IP address of the source, pynetdicom includes port too
primitive.calling_presentation_address = (
self.requestor.address, self.requestor.port
)
# The TCP/IP address of the destination, pynetdicom includes port too
primitive.called_presentation_address = (
self.acceptor.address, self.acceptor.port
)
# Proposed presentation contexts
primitive.presentation_context_definition_list = (
}
try:
if diagnostic not in _valid_reason_diagnostic[source]:
raise ValueError(
"Invalid 'diagnostic' parameter value"
)
except KeyError:
raise ValueError("Invalid 'source' parameter value")
# The following parameters must be set for an A-ASSOCIATE (reject)
# primitive (* sent in A-ASSOCIATE-RJ PDU):
# Result*
# Result Source*
# Diagnostic*
primitive = A_ASSOCIATE()
primitive.result = result
primitive.result_source = source
primitive.diagnostic = diagnostic
self.acceptor.primitive = primitive
self.dul.send_pdu(primitive)
self.assoc.is_rejected = True
self.assoc.is_established = False
def send_accept(self):
"""Send an A-ASSOCIATE (accept) to the peer."""
# The following parameters must be set for an A-ASSOCIATE (accept)
# primitive (* sent in A-ASSOCIATE-AC PDU):
# Application Context Name*
# Calling AE Title* (but not to be tested)
# Called AE Title* (but not to be tested)
# User Information
# Maximum PDV Length*
# Implementation Class UID*
# Result
# Result Source
# Presentation Context Definition List Result*
primitive = A_ASSOCIATE()
primitive.application_context_name = APPLICATION_CONTEXT_NAME
primitive.calling_ae_title = self.requestor.primitive.calling_ae_title
primitive.called_ae_title = self.requestor.primitive.called_ae_title
primitive.result = 0x00
primitive.result_source = 0x01
primitive.presentation_context_definition_results_list = (
self.assoc.accepted_contexts + self.assoc.rejected_contexts
)
## User Information - PS3.7 Annex D.3.3
primitive.user_information = self.acceptor.user_information
self.acceptor.primitive = primitive
self.dul.send_pdu(primitive)
def to_primitive(self):
"""Return an A-ASSOCIATE (reject) primitive from the current PDU.
Returns
-------
pdu_primitives.A_ASSOCIATE
The primitive representation of the current PDU.
"""
from pynetdicom.pdu_primitives import A_ASSOCIATE
primitive = A_ASSOCIATE()
primitive.result = self.result
primitive.result_source = self.source
primitive.diagnostic = self.reason_diagnostic
return primitive
LOGGER.error(
"One or more requested presentation contexts must be set "
"prior to association negotiation"
)
self.assoc.kill()
return
# Build and send an A-ASSOCIATE (request) PDU to the peer
self.send_request()
evt.trigger(self.assoc, evt.EVT_REQUESTED, {})
# Wait for response
rsp = self.dul.receive_pdu(wait=True, timeout=self.acse_timeout)
# Association accepted or rejected
if isinstance(rsp, A_ASSOCIATE):
self.acceptor.primitive = rsp
# Accepted
if rsp.result == 0x00:
## Handle SCP/SCU Role Selection response
# Apply requestor's proposed SCP/SCU role selection (if any)
# to the requested contexts
rq_roles = {
uid:(ii.scu_role, ii.scp_role)
for uid, ii in self.requestor.role_selection.items()
}
if rq_roles:
for cx in self.requestor.requested_contexts:
try:
(cx.scu_role, cx.scp_role) = rq_roles[
cx.abstract_syntax
]
def to_primitive(self):
"""Return an A-ASSOCIATE (request) primitive from the current PDU.
Returns
-------
pdu_primitives.A_ASSOCIATE
The primitive representation of the current PDU.
"""
from pynetdicom.pdu_primitives import A_ASSOCIATE
primitive = A_ASSOCIATE()
primitive.calling_ae_title = self.calling_ae_title
primitive.called_ae_title = self.called_ae_title
primitive.application_context_name = self.application_context_name
for item in self.variable_items:
# Add presentation contexts
if isinstance(item, PresentationContextItemRQ):
primitive.presentation_context_definition_list.append(
item.to_primitive())
# Add user information
elif isinstance(item, UserInformationItem):
primitive.user_information = item.to_primitive()
return primitive