Пример #1
0
	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
Пример #2
0
	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
Пример #3
0
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 )
Пример #4
0
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 )
Пример #5
0
    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 + '' )
Пример #6
0
        def __init__( self ):
            self.log = logging.getLogger( self.__class__.__name__ )

            self.lastHandler = None
            self.state = State( self, self.STATE_STOPPED, { self.STATE_PAUSED : 30 } )