def test_network_timeout(self): """ Check AE network timeout change produces good value """ ae = AE(scu_sop_class=['1.2.840.10008.1.1']) self.assertTrue(ae.network_timeout == None) ae.network_timeout = None self.assertTrue(ae.network_timeout == None) ae.network_timeout = -100 self.assertTrue(ae.network_timeout == None) ae.network_timeout = 'a' self.assertTrue(ae.network_timeout == None) ae.network_timeout = 0 self.assertTrue(ae.network_timeout == 0) ae.network_timeout = 30 self.assertTrue(ae.network_timeout == 30)
def __init__(self, dicom_home, port=11112, name="FINDSCP", prefer_uncompr=True, prefer_little=False, prefer_big=False, implicit=False, timeout=None, dimse_timeout=None, acse_timeout=60, pdu_max=16384, update_on_find=False, start=False): '''create a FindSCP (Service Class Provider) for query/retrieve and basic workflow management :param dicom_home: must be the base folder of dicom files **TODO: make this more robust :param port: TCP/IP port number to listen on :param name: the title/name for the ae. 'FINDSCP' is used if not defined. :param prefer_uncompr: prefer explicit VR local byte order (default) :param prefer_little: prefer explicit VR little endian TS :param perfer_big: prefer explicit VR big endian TS :param implicit: accept implicit VR little endian TS only :param timeout: timeout for connection requests (default None) :param acse_timeout: timeout for ACSE messages (default 60) :param dimse_timeout: timeout for the DIMSE messages (default None) :param pdu_max: set max receive pdu to n bytes (4096..131072) default 16382 :param update_on_find: if True, dicoms in dicom_home are updated on the find request ''' self.port = port # Base for dicom files (we can do better here) self.base = dicom_home self.dicoms = get_dicom_files(self.base) self.update_on_find = update_on_find # Update preferences self.update_transfer_syntax(prefer_uncompr=prefer_uncompr, prefer_little=prefer_little, prefer_big=prefer_big, implicit=implicit) ae = AE(scp_sop_class=QueryRetrieveSOPClassList, transfer_syntax=self.transfer_syntax, scu_sop_class=[], ae_title=name, port=self.port) # Set timeouts, name, transfer ae.maximum_pdu_size = pdu_max ae.network_timeout = timeout ae.acse_timeout = acse_timeout ae.dimse_timeout = dimse_timeout BaseSCP.__init__(self, ae=ae) self.status = self.pending_matches self.cancel = False if start is True: self.run()
def __init__(self, port=11112, peer=None, to_port=None, to_name="ANY-SCP", name='STORESCU', prefer_uncompr=True, prefer_little=False, repeat=1, prefer_big=False, implicit=False, timeout=None, dimse_timeout=None, acse_timeout=60, pdu_max=16382, start=False): ''' :param port: the port to use, default is 11112. :param peer: the hostname of DICOM peer (not required) :param toport: the port of the peer to send to :parm toname: the name of the peer to send to :param repeat: repeat N times (default is 1) :param name: the title/name for the ae. 'ECHOSCU' is used if not defined. :param prefer_uncompr: prefer explicit VR local byte order (default) :param prefer_little: prefer explicit VR little endian TS :param perfer_big: prefer explicit VR big endian TS :param implicit: accept implicit VR little endian TS only :param timeout: timeout for connection requests (default None) :param acse_timeout: timeout for ACSE messages (default 60) :param dimse_timeout: timeout for the DIMSE messages (default None) :param pdu_max: set max receive pdu to n bytes (4096..131072) default 16382 :param start: if True, start the ae. (default False) :param abort: if True, abort the association after releasing it (default False) ''' self.port = port self.repeat = repeat self.abort = abort self.update_peer(peer=peer, port=to_port, name=to_name) # Update preferences self.update_transfer_syntax(prefer_uncompr=prefer_uncompr, prefer_little=prefer_little, prefer_big=prefer_big, implicit=implicit) ae = AE(ae_title=name, port=self.port, scu_sop_class=StorageSOPClassList, scp_sop_class=[], transfer_syntax=self.transfer_syntax) # Set timeouts, name, transfer ae.ae_title=name ae.maximum_pdu_size = pdu_max ae.network_timeout = timeout ae.acse_timeout = acse_timeout ae.dimse_timeout = dimse_timeout BaseSCU.__init__(self,ae=ae) self.status = self.success
def __init__(self, port=11112, name="ECHOSCP", prefer_uncompr=True, prefer_little=False, prefer_big=False, implicit=False, timeout=None, dimse_timeout=None, acse_timeout=60, pdu_max=16384, start=False): ''' :param port: the port to use, default is 11112. :param name: the title/name for the ae. 'ECHOSCP' is used if not defined. :param prefer_uncompr: prefer explicit VR local byte order (default) :param prefer_little: prefer explicit VR little endian TS :param perfer_big: prefer explicit VR big endian TS :param implicit: accept implicit VR little endian TS only :param timeout: timeout for connection requests (default None) :param acse_timeout: timeout for ACSE messages (default 60) :param dimse_timeout: timeout for the DIMSE messages (default None) :param pdu_max: set max receive pdu to n bytes (4096..131072) default 16382 :param start: if True, start the ae. ''' self.port = port # Update preferences self.update_transfer_syntax(prefer_uncompr=prefer_uncompr, prefer_little=prefer_little, prefer_big=prefer_big, implicit=implicit) ae = AE(scp_sop_class=[VerificationSOPClass], scu_sop_class=[], port=self.port, transfer_syntax=self.transfer_syntax) # Set timeouts, name, transfer ae.ae_title = name ae.maximum_pdu_size = pdu_max ae.network_timeout = timeout ae.acse_timeout = acse_timeout ae.dimse_timeout = dimse_timeout BaseSCP.__init__(self, ae=ae) if start is True: self.run()
print('echoscu.py v%s' % (VERSION)) sys.exit() LOGGER.debug('echoscu.py v%s', VERSION) LOGGER.debug('') # Create local AE # Binding to port 0, OS will pick an available port ae = AE(ae_title=args.calling_aet, port=0, scu_sop_class=[VerificationSOPClass], scp_sop_class=[], transfer_syntax=transfer_syntaxes) # Set timeouts ae.network_timeout = args.timeout ae.acse_timeout = args.acse_timeout ae.dimse_timeout = args.dimse_timeout # Request association with remote AE assoc = ae.associate(args.peer, args.port, args.called_aet, max_pdu=args.max_pdu) # If we successfully Associated then send N DIMSE C-ECHOs if assoc.is_established: for ii in range(args.repeat): # `status` is a pydicom Dataset status = assoc.send_c_echo()