code: def sap_indication(self, apdu):
          
          if _debug: StateMachineAccessPoint._debug("sap_indication %r", apdu)
  
          # check device communication control
          if self.dccEnableDisable == 'enable':
              if _debug: StateMachineAccessPoint._debug("    - communications enabled")
  
          elif self.dccEnableDisable == 'disable':
              if _debug: StateMachineAccessPoint._debug("    - communications disabled")
              return
  
          elif self.dccEnableDisable == 'disableInitiation':
              if _debug: StateMachineAccessPoint._debug("    - initiation disabled")
  
              if (apdu.apduType == 1) and (apdu.apduService == 0):
                  if _debug: StateMachineAccessPoint._debug("    - continue with I-Am")
              else:
                  if _debug: StateMachineAccessPoint._debug("    - not an I-Am")
                  return
  
          if isinstance(apdu, UnconfirmedRequestPDU):
              # deliver to the device
              self.request(apdu)
  
          elif isinstance(apdu, ConfirmedRequestPDU):
              # make sure it has an invoke ID
              if apdu.apduInvokeID is None:
                  apdu.apduInvokeID = self.get_next_invoke_id(apdu.pduDestination)
              else:
                  # verify the invoke ID isn't already being used
                  for tr in self.clientTransactions:
                      if (apdu.apduInvokeID == tr.invokeID) and (apdu.pduDestination == tr.pdu_address):
                          raise RuntimeError("invoke ID in use")
  
              # warning for bogus requests
              if (apdu.pduDestination.addrType != Address.localStationAddr) and (apdu.pduDestination.addrType != Address.remoteStationAddr):
                  StateMachineAccessPoint._warning("%s is not a local or remote station", apdu.pduDestination)
  
              # create a client transaction state machine
              tr = ClientSSM(self, apdu.pduDestination)
              if _debug: StateMachineAccessPoint._debug("    - client segmentation state machine: %r", tr)
  
              # add it to our transactions to track it
              self.clientTransactions.append(tr)
  
              # let it run
              tr.indication(apdu)
  
          else:
              raise RuntimeError("invalid APDU (9)")
docs: This function is called when the application is requesting
          a new transaction as a client.