def __init__( self ): super( UacTransaction, self ).__init__() self.log = logging.getLogger( self.__class__.__name__ ) self.state = State( self, self.STATE_INITIAL, { self.STATE_TRYING : self.CONFIG_TIMER_F, self.STATE_COMPLETED : self.CONFIG_TIMER_K } ) self.timerE = None self.request = None self.lastResponse = None self.termination = None
def __init__( self, auto100 = True ): super( UasTransaction, self ).__init__() self.log = logging.getLogger( self.__class__.__name__ ) self.state = State( self, self.STATE_INITIAL, { self.STATE_COMPLETED : self.CONFIG_TIMER_J } ) self.auto100 = auto100 self.lastRequest = None self.lastResponse = None self.result = None
class UacTransaction(TransactionBase): """The UacTransaction implements a non-INVITE client transaction as per RFC3261 section 17.1.2.""" def __init__( self ): super( UacTransaction, self ).__init__() self.log = logging.getLogger( self.__class__.__name__ ) self.state = State( self, self.STATE_INITIAL, { self.STATE_TRYING : self.CONFIG_TIMER_F, self.STATE_COMPLETED : self.CONFIG_TIMER_K } ) self.timerE = None self.request = None self.lastResponse = None self.termination = None @Dispatcher.eventHandler def start( self, event ): pass @Dispatcher.eventHandler def cancel( self ): pass @Dispatcher.eventHandler def receive( self, event ): pass def identifyEvent( self, event ): if isinstance(event, MessageEvent): if isinstance(event.message, Request): return self.EVENT_REQUEST elif event.message.statusClass == 1: return self.EVENT_1xx elif event.message.statusClass == 2: return self.EVENT_2xx elif event.message.statusClass >= 3: return self.EVENT_3xx else: return event() raise SipException( 'Ignoring event ' + str(event) + '.' ) def identifyState( self, event ): return self.state.identifyState( event ) # Initial def inInitial_onRequest( self, event ): self.request = event self.state.changeState( self.STATE_TRYING ) # Send request to server. Dispatcher.getInstance().notify( Event( self.NOTIFICATION_STARTED ), messageEvent = event ) #FIXME: This notify is also below... # Inform the TU. Dispatcher.getInstance().notify( Event( self.NOTIFICATION_STARTED ) ) # Trying def inTrying_onEnter( self, event ): # Only start timer E if the transport is unreliable. if self.request.transport == 'udp': self.timerE = Dispatcher.getInstance().schedule( self.CONFIG_TIMER_E, Event( self.EVENT_TIMER_E ), srcObj = self, dstObj = self ) def inTrying_onLeave( self, event ): self.timerE.cancel() def inTrying_on1xx( self, event ): # Save response. self.lastResponse = event # Send response to the TU. #Dispatcher.getInstance().notify( Event( self.NOTIFICATION_1xx ), messageEvent = event ) self.state.changeState( self.STATE_PROCEEDING ) def inTrying_on2xx( self, event ): # Save response. self.lastResponse = event # Send response to the TU. #Dispatcher.getInstance().notify( Event( self.NOTIFICATION_2xx ), messageEvent = event ) self.state.changeState( self.STATE_COMPLETED ) def inTrying_on3xx( self, event ): # Save response. self.lastResponse = event # Send response to the TU. #Dispatcher.getInstance().notify( Event( self.NOTIFICATION_3xx ), messageEvent = event ) self.state.changeState( self.STATE_COMPLETED ) def inTrying_onTimerE( self, event ): # Resend request to server. Dispatcher.getInstance().notify( self.request ) # Restart Timer E. Dispatcher.getInstance().schedule( self.CONFIG_TIMER_E, Event( self.EVENT_TIMER_E ), srcObj = self, dstObj = self ) def inTrying_onTimerF( self, event ): self.result = self.RESULT_TIMEOUT_F self.state.changeState( self.STATE_TERMINATED ) def inTrying_onTransportError( self, event ): self.result = self.RESULT_TRANSPORT_ERROR self.state.changeState( self.STATE_TERMINATED ) # Proceeding def inProceeding_on1xx( self, event ): # Save response. self.lastResponse = event # Send response to the TU. #Dispatcher.getInstance().notify( Event( self.NOTIFICATION_1xx ), messageEvent = event ) def inProceeding_on2xx( self, event ): # Save response. self.lastResponse = event # Send response to the TU. #Dispatcher.getInstance().notify( Event( self.NOTIFICATION_2xx ), messageEvent = event ) self.state.changeState( self.STATE_COMPLETED ) def inProceeding_on3xx( self, event ): # Save response. self.lastResponse = event # Send response to the TU. #Dispatcher.getInstance().notify( Event( self.NOTIFICATION_3xx ), messageEvent = event ) self.state.changeState( self.STATE_COMPLETED ) def inProceeding_onTimerE( self, event ): # Resend request to server. Dispatcher.getInstance().notify( self.request ) # Restart Timer E. Dispatcher.getInstance().schedule( self.CONFIG_TIMER_E, Event( self.EVENT_TIMER_E ), srcObj = self, dstObj = self ) def inProceeding_onTimerF( self, event ): self.result = self.RESULT_TIMEOUT self.state.changeState( self.STATE_TERMINATED ) def inProceeding_onTransportError( self, event ): self.result = self.RESULT_TRANSPORT_ERROR self.state.changeState( self.STATE_TERMINATED ) # Completed def inCompleted_onEnter( self, event ): # Inform the TU. Dispatcher.getInstance().notify( Event( self.NOTIFICATION_COMPLETED ) ) def inCompleted_onLeave( self, event ): pass def inCompleted_onTimerK( self, event ): self.result = self.RESULT_COMPLETED self.state.changeState( self.STATE_TERMINATED ) # Terminated def inTerminated_onEnter( self, event ): # Inform the TU. Dispatcher.getInstance().notify( Event( self.NOTIFICATION_TERMINATED ), result = self.result )
class UasTransaction(TransactionBase): """The UacTransaction implements a non-INVITE server transaction as per RFC3261 section 17.""" def __init__( self, auto100 = True ): super( UasTransaction, self ).__init__() self.log = logging.getLogger( self.__class__.__name__ ) self.state = State( self, self.STATE_INITIAL, { self.STATE_COMPLETED : self.CONFIG_TIMER_J } ) self.auto100 = auto100 self.lastRequest = None self.lastResponse = None self.result = None def identifyEvent( self, event ): if isinstance(event, MessageEvent): if isinstance(event.message, Request): return self.EVENT_REQUEST elif event.message.statusClass == 1: return self.EVENT_1xx elif event.message.statusClass == 2: return self.EVENT_2xx elif event.message.statusClass >= 3: return self.EVENT_3xx else: return event() raise SipException( 'Ignoring event ' + str(event) + '.' ) def identifyState( self, event ): return self.state.identifyState( event ) # Initial def inInitial_onRequest( self, event ): self.lastRequest = event # Pass request to TU. if self.auto100: # Send 100 response to client. e = createResponseEvent( event, 100 ) Dispatcher.getInstance().notify( e ) self.state.changeState( self.STATE_TRYING ) # Trying def inTrying_on1xx( self, event ): # Save response. self.lastResponse = event # Send response to client. self.state.changeState( self.STATE_PROCEEDING ) def inTrying_on2xx( self, event ): # Save response. self.lastResponse = event # Send response to client. self.state.changeState( self.STATE_COMPLETED ) def inTrying_on3xx( self, event ): # Save response. self.lastResponse = event # Send response to client. self.state.changeState( self.STATE_COMPLETED ) # Proceeding def inProceeding_onRequest( self, event ): # Resend response to client. Dispatcher.getInstance().notify( self.lastResponse ) def inProceeding_on1xx( self, event ): # Save response. self.lastResponse = event # Send response to client. # Dispatcher.getInstance().notify( event ) def inProceeding_on2xx( self, event ): # Save response. self.lastResponse = event # Inform the TU. self.state.changeState( self.STATE_COMPLETED ) def inProceeding_on3xx( self, event ): # Save response. self.lastResponse = event # Send response to client. self.state.changeState( self.STATE_COMPLETED ) def inProceeding_onTransportError( self, event ): self.result = self.RESULT_TRANSPORT_ERROR self.state.changeState( self.STATE_TERMINATED ) # Completed def inCompleted_onEnter( self, event ): # Inform the TU. Dispatcher.getInstance().notify( Event( self.NOTIFICATION_COMPLETED ) ) def inCompleted_onRequest( self, event ): # Resend response to client. Dispatcher.getInstance().notify( self.lastResponse ) def inCompleted_onTransportError( self, event ): self.result = self.RESULT_TRANSPORT_ERROR self.state.changeState( self.STATE_TERMINATED ) def inCompleted_onTimerJ( self, event ): self.result = self.RESULT_TIMEOUT_J self.state.changeState( self.STATE_TERMINATED ) # Terminated def inTerminated_onEnter( self, event ): # Inform the TU. Dispatcher.getInstance().notify( Event( self.NOTIFICATION_TERMINATED ), result = self.result )
class TestObj(object): STATE_STOPPED = 'Stopped' STATE_STARTED = 'Started' STATE_PAUSED = 'Paused' def __init__( self ): self.log = logging.getLogger( self.__class__.__name__ ) self.lastHandler = None self.state = State( self, self.STATE_STOPPED, { self.STATE_PAUSED : 30 } ) def identifyState( self, event ): return self.state.identifyState( event ) # Commands @Dispatcher.eventHandler def Start( self, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) @Dispatcher.eventHandler def Stop( self, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) @Dispatcher.eventHandler def Pause( self, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) # Stopped def inStopped_onStart( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) self.state.changeState( self.STATE_STARTED ) def inStopped_onEnter( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) def inStopped_onLeave( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) def inStopped_onDefault( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) # Started def inStarted_onPause( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) self.state.changeState( self.STATE_PAUSED ) def inStarted_onStop( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) self.state.changeState( self.STATE_STOPPED ) def inStarted_onEnter( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) def inStarted_onLeave( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) def inStarted_onDefault( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) # Paused def inPaused_onStart( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) self.state.changeState( self.STATE_STARTED ) def inPaused_onStop( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) self.state.changeState( self.STATE_STOPPED ) def inPaused_onEnter( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) def inPaused_onLeave( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) def inPaused_onDefault( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) # Default def onEnter( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) def onEnter( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' ) def onDefault( self, event, *args, **kwargs ): self.lastHandler = sys._getframe().f_code.co_name self.log.debug( sys._getframe().f_code.co_name + '' )
def __init__( self ): self.log = logging.getLogger( self.__class__.__name__ ) self.lastHandler = None self.state = State( self, self.STATE_STOPPED, { self.STATE_PAUSED : 30 } )