Service State Machine (fsm)

Implementation of the OSI Upper Layer Services DICOM, Part 8, Section 7

class pynetdicom2.fsm.States

Services states enumeration.

STA_1 = 0

Idle

STA_2 = 1

Transport Connection Open (Awaiting A-ASSOCIATE-RQ PDU)

STA_3 = 2

Awaiting Local A-ASSOCIATE response primitive (from local user)

STA_4 = 3

Awaiting transport connection opening to complete (from local transport service)

STA_5 = 4

Awaiting A-ASSOCIATE-AC or A-ASSOCIATE-RJ PDU

STA_6 = 5

Association established and ready for data transfer

STA_7 = 6

Awaiting A-RELEASE-RP PDU

STA_8 = 7

Awaiting local A-RELEASE response primitive (from local user)

STA_9 = 8

Release collision requestor side; awaiting A-RELEASE response (from local user)

STA_10 = 9

Release collision acceptor side; awaiting A-RELEASE-RP PDU

STA_11 = 10

Release collision requestor side; awaiting A-RELEASE-RP PDU

STA_12 = 11

Release collision acceptor side; awaiting A-RELEASE response primitive (from local user)

STA_13 = 12

Awaiting Transport Connection Close Indication (Association no longer exists)

class pynetdicom2.fsm.Events

Events enumeration.

EVT_1 = 0

A-ASSOCIATE request (local user)

EVT_2 = 1

Transport connect confirmation (local transport service)

EVT_3 = 2

A-ASSOCIATE-AC PDU (received on transport connection)

EVT_4 = 3

A-ASSOCIATE-RJ PDU (received on transport connection)

EVT_5 = 4

Transport connection indication (local transport service)

EVT_6 = 5

A-ASSOCIATE-RQ PDU (on tranport connection)

EVT_7 = 6

A-ASSOCIATE response primitive (accept)

EVT_8 = 7

A-ASSOCIATE response primitive (reject)

EVT_9 = 8

P-DATA request primitive

EVT_10 = 9

P-DATA-TF PDU (on transport connection)

EVT_11 = 10

A-RELEASE request primitive

EVT_12 = 11

A-RELEASE-RQ PDU (on transport)

EVT_13 = 12

A-RELEASE-RP PDU (on transport)

EVT_14 = 13

A-RELEASE response primitive

EVT_15 = 14

A-ABORT request primitive

EVT_16 = 15

A-ABORT PDU (on transport)

EVT_17 = 16

Transport connection closed

EVT_18 = 17

ARTIM timer expired (rej/rel)

EVT_19 = 18

Unrecognized/invalid PDU

class pynetdicom2.fsm.StateMachine(provider, timer, store_in_file, get_file_cb)

Service State Machine implementation.

Variables:
  • current_state – current state
  • provider – DUL provider
  • timer
  • store_in_file – set of SOP Class UIDs, for which incoming datasets should be stored in a file, rather than in-memory
  • get_file_cb – callback for getting a file object for storage
  • accepted_contexts – accepted presentation contexts in current association
  • dimse_decoder – decoder for incoming P-DATA-TF PDUs, used to re-create incoming DIMSE message
  • transition_table – state machine transition table
primitive

Current PDU.

dul_socket

TCP Socket

to_service_user

Outgoing PDU/DIMSE message queue

action(event)

Execute the action triggered by event

ae_1()

Issue TransportConnect request primitive to local transport service.

ae_2()

Send A_ASSOCIATE-RQ PDU.

ae_3()

Issue A-ASSOCIATE confirmation (accept) primitive.

ae_4()

Issue A-ASSOCIATE confirmation (reject) primitive and close transport connection.

ae_5()

Issue transport connection response primitive; start ARTIM timer.

ae_6()

Check A-ASSOCIATE-RQ.

Stop ARTIM timer and if A-ASSOCIATE-RQ acceptable by service provider - issue A-ASSOCIATE indication primitive.

ae_7()

Send A-ASSOCIATE-AC PDU.

ae_8()

Send A-ASSOCIATE-RJ PDU.

dt_1()

Send P-DATA-TF PDU.

dt_2()

Send P-DATA indication primitive.

ar_1()

Send A-RELEASE-RQ PDU.

ar_2()

Send A-RELEASE indication primitive.

ar_3()

Issue A-RELEASE confirmation primitive and close transport connection.

ar_4()

Issue A-RELEASE-RP PDU and start ARTIM timer.

ar_5()

Stop ARTIM timer.

ar_6()

Issue P-DATA indication.

ar_7()

Issue P-DATA-TF PDU.

ar_8()

Issue A-RELEASE indication (release collision).

ar_9()

Send A-RELEASE-RP PDU.

ar_10()

Issue A-RELEASE confirmation primitive.

aa_1()

Send A-ABORT PDU (service-user source) and start (or restart) ARTIM timer.

aa_2()

Stop ARTIM timer if running. Close transport connection.

aa_3()

Issue A-ABORT or A-P-ABORT indication and close transport connection.

If (service-user initiated abort):

  • Issue A-ABORT indication and close transport connection.

Otherwise (service-provider initiated abort):

  • Issue A-P-ABORT indication and close transport connection.

This action is triggered by the reception of an A-ABORT PDU.

aa_4()

Issue A-P-ABORT indication primitive.

aa_5()

Stop ARTIM timer.

aa_6()

Ignore PDU.

aa_7()

Send A-ABORT PDU.

aa_8()

Send A-ABORT PDU, issue an A-P-ABORT indication and start ARTIM timer.

class pynetdicom2.fsm.DIMSEDecoder(accepted_contexts, store_in_file, get_file_cb)

DIMSE Message decoder.

Decodes incoming P-DATA-TF PDUs into DIMSE message instance.

Variables:
  • accepted_contexts – accepted presentation contexts in current association
  • store_in_file – set of SOP Class UIDs, for which incoming datasets should be stored in a file, rather than in-memory
  • get_file_cb – callback for getting a file object for storage
  • receivingTrue if DIMSEDecoder instnace has not received all P-DATA-TF PDUs for the current DIMSE message
  • command_set_receivedTrue if Command Set for DIMSE message is received
  • data_set_receivedTrue if Dataset for DIMSE message is received
  • pc_id – Presentation Context ID
  • msg – decoded DIMSE message
process(p_data)

Processes new incoming P-DATA-TF PDU

Parameters:p_data – incoming P-DATA-TF PDU
Raises:exceptions.DIMSEProcessingError – raised if unknown PDV type is encountered