示例#1
0
 def __init__(self, host, port, password, filter="ALL",
          eventjson=True, pool_size=5000, trace=False, connect_timeout=20):
     EventSocket.__init__(self, filter, eventjson, pool_size, trace=trace)
     # add the auth request event callback
     self._response_callbacks['auth/request'] = self._auth_request
     self._wait_auth_event = gevent.event.AsyncResult()
     self.password = password
     self.transport = InboundTransport(host, port, connect_timeout=connect_timeout)
示例#2
0
class InboundEventSocket(EventSocket):
    '''
    FreeSWITCH Inbound Event Socket
    '''
    def __init__(self,
                 host,
                 port,
                 password,
                 filter="ALL",
                 eventjson=True,
                 pool_size=5000,
                 trace=False,
                 connect_timeout=20):
        EventSocket.__init__(self, filter, eventjson, pool_size, trace=trace)
        # add the auth request event callback
        self._response_callbacks['auth/request'] = self._auth_request
        self._wait_auth_event = gevent.event.AsyncResult()
        self.password = password
        self.transport = InboundTransport(host,
                                          port,
                                          connect_timeout=connect_timeout)

    def _auth_request(self, event):
        '''
        Receives auth/request callback.

        Only used by InboundEventSocket.
        '''
        # Wake up waiting request
        self._wait_auth_event.set(True)

    def _wait_auth_request(self):
        '''
        Waits until auth/request event is received.
        '''
        # Sets timeout to wait for auth/request
        timer = Timeout(self.transport.get_connect_timeout())
        timer.start()
        try:
            # When auth/request is received,
            # _auth_request method will wake up async result
            # so we will just wait this event here.
            return self._wait_auth_event.get()
        except Timeout:
            raise ConnectError("Timeout waiting auth/request")
        finally:
            timer.cancel()

    def connect(self):
        '''
        Connects to mod_eventsocket, authenticates and sets event filter.

        Returns True on success or raises ConnectError exception on failure.
        '''
        try:
            self.run()
        except ConnectError, e:
            self.connected = False
            raise
class InboundEventSocket(EventSocket):
    '''
    FreeSWITCH Inbound Event Socket
    '''
    def __init__(self, host, port, password, filter="ALL",
             eventjson=True, pool_size=5000, trace=False, connect_timeout=20):
        EventSocket.__init__(self, filter, eventjson, pool_size, trace=trace)
        # add the auth request event callback
        self._response_callbacks['auth/request'] = self._auth_request
        self._wait_auth_event = gevent.event.AsyncResult()
        self.password = password
        self.transport = InboundTransport(host, port, connect_timeout=connect_timeout)

    def _auth_request(self, event):
        '''
        Receives auth/request callback.

        Only used by InboundEventSocket.
        '''
        # Wake up waiting request
        self._wait_auth_event.set(True)

    def _wait_auth_request(self):
        '''
        Waits until auth/request event is received.
        '''
        # Sets timeout to wait for auth/request
        timer = Timeout(self.transport.get_connect_timeout())
        timer.start()
        try:
            # When auth/request is received,
            # _auth_request method will wake up async result 
            # so we will just wait this event here.
            return self._wait_auth_event.get()
        except Timeout:
            raise ConnectError("Timeout waiting auth/request")
        finally:
            timer.cancel()

    def connect(self):
        '''
        Connects to mod_eventsocket, authenticates and sets event filter.

        Returns True on success or raises ConnectError exception on failure.
        '''
        try:
            self.run()
        except ConnectError, e:
            self.connected = False
            raise
示例#4
0
 def __init__(self, host, port, password, filter="ALL", 
              pool_size=500, connect_timeout=20, eventjson=True):
     EventSocket.__init__(self, filter, pool_size, eventjson)
     self.password = password
     self.transport = InboundTransport(host, port, connect_timeout=connect_timeout)
示例#5
0
class InboundEventSocket(EventSocket):
    '''
    FreeSWITCH Inbound Event Socket
    '''
    def __init__(self, host, port, password, filter="ALL", 
                 pool_size=500, connect_timeout=20, eventjson=True):
        EventSocket.__init__(self, filter, pool_size, eventjson)
        self.password = password
        self.transport = InboundTransport(host, port, connect_timeout=connect_timeout)

    def _wait_auth_request(self):
        '''
        Waits until auth/request event is received.
        '''
        # Sets timeout to wait for auth/request
        timer = Timeout(self.transport.get_connect_timeout())
        timer.start()
        try:
            # When auth/request is received,
            # _authRequest method in EventSocket will push this event to queue
            # so we will just wait this event here.
            return self._response_queue.get()
        except Timeout:
            raise ConnectError("Timeout waiting auth/request")
        finally:
            timer.cancel()

    def connect(self):
        '''
        Connects to mod_eventsocket, authenticates and sets event filter.

        Returns True on success or raises ConnectError exception on failure.
        '''
        super(InboundEventSocket, self).connect()
        # Connects transport, if connection fails, raise ConnectError
        try:
            self.transport.connect()
        except Exception, e:
            raise ConnectError("Transport failure: %s" % str(e))

        # Be sure queue response is empty before starting
        for x in range(1000):
            if self._response_queue.empty():
                break
            self._response_queue.get_nowait()

        # Starts handling events
        self.start_event_handler()

        # Waits for auth/request, if timeout, raises ConnectError
        self._wait_auth_request()

        # We are ready now !
        # Authenticate or raise ConnectError
        auth_response = self.auth(self.password)
        if not auth_response.is_reply_text_success():
            self.disconnect()
            raise ConnectError("Auth failure")

        # Sets event filter or raises ConnectError
        if self._filter:
            if self._is_eventjson:
                filter_response = self.eventjson(self._filter)
            else:
                filter_response = self.eventplain(self._filter)
            if not filter_response.is_reply_text_success():
                self.disconnect()
                raise ConnectError("Event filter failure")

        # Sets connected flag to True
        self.connected = True
        return True