Example #1
0
class Client:
    def __init__(self, name, server_addr):
        self.SERVER_ADDR = server_addr
        self.name = name
        self.voip_params = {u'username': self.name,
                            u'sip_server_pwd': u'12345678abcd',
                            u'sip_server_address': self.SERVER_ADDR,
                            u'sip_server_user': self.name,
                            u'sip_server_transport': u'udp',
                            u'log_level': 1,
                            u'debug': True}
        self.CALL_ACTIVE = 0
        self.myVoip = VoipLib()
        print "Initializing the Voip Lib..."
        self.myVoip.init_lib(self.voip_params, self.call_events)
        print "Registering the account on the Sip Server..."
        self.myVoip.register_account()
        self.caller = 0
        self.extension = None

    def set_caller(self, caller):
        self.caller = caller

    def set_exten(self, extension):
        self.extension = extension

    def call_events(self, voip_event_type, voip_event, params):
        print "Received event type:%s Event:%s -> Params: %s" % (voip_event_type, voip_event, params)

        # event triggered when the account registration has been confirmed by the remote Sip Server
        if voip_event == VoipEvent.ACCOUNT_REGISTERED:
            print "Account registered"

        # event triggered when a new call is incoming
        elif voip_event == VoipEvent.CALL_INCOMING:
            print "INCOMING CALL From %s" % params["from"]
            time.sleep(2)
            print "Answering..."
            self.myVoip.answer_call()

        # event  triggered when a call has been established
        elif voip_event == VoipEvent.CALL_ACTIVE:
            print "The call with %s has been established" % self.myVoip.get_call().get_remote_uri()
            self.CALL_ACTIVE = 1

        # events triggered when the call ends for some reasons
        elif (voip_event in [VoipEvent.CALL_REMOTE_DISCONNECTION_HANGUP, VoipEvent.CALL_REMOTE_HANGUP,
                             VoipEvent.CALL_HANGUP]):
            print "End of call."
            self.CALL_ACTIVE = 0

        # event triggered when the library was destroyed
        elif voip_event == VoipEvent.LIB_DEINITIALIZED:
            print "Lib Destroyed. Exiting from the app."
            return

        # just print informations about other events triggered by the library
        else:
            print "Received unhandled event type:%s --> %s" % (voip_event_type, voip_event)

    def start_call(self):
        if self.caller == 1:
            print "Making a call dialing the extension: %s" % self.extension
            self.myVoip.make_call(self.extension)

    def hangup(self):
        self.myVoip.hangup_call()

    def end(self):
        self.myVoip.destroy_lib()
class Uzim(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        self.title_font30 = tkfont.Font(family='Helvetica',
                                        size=30,
                                        weight="bold")
        self.title_font25 = tkfont.Font(family='Helvetica',
                                        size=25,
                                        weight="bold")
        self.title_font15 = tkfont.Font(family='Helvetica',
                                        size=15,
                                        weight="bold")

        self.title("Uzim")

        # instantiate the lib
        self.my_voip = VoipLib()

        # the container is where we'll stack a bunch of frames
        # on top of each other, then the one we want visible
        # will be raised above the others
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {
            "LoginPage": LoginPage(parent=container, controller=self),
            "DialPage": DialPage(parent=container, controller=self),
            "OnGoingCallPage": OnGoingCallPage(parent=container,
                                               controller=self)
        }

        self.frames["LoginPage"].grid(row=0, column=0, sticky="nsew")
        self.frames["DialPage"].grid(row=0, column=0, sticky="nsew")
        self.frames["OnGoingCallPage"].grid(row=0, column=0, sticky="nsew")

        self.show_frame("LoginPage")

    def show_error(self, message):
        if isinstance(message, dict) and "error" in message:
            message = message["error"]
        tk.messagebox.showerror("Error", message)

    def show_frame(self, page_name):
        '''Show a frame for the given page name'''
        print(page_name)
        frame = self.frames[page_name]
        frame.tkraise()

    def login_on_server(self, Username, Password, ServerIP):
        self.voip_params = {
            u'username': Username,  # a name describing the user
            u'sip_server_address': ServerIP,
            # the ip of the remote sip server (default port: 5060)
            u'sip_server_user': Username,  # the username of the sip account
            u'sip_server_pwd': Password,  # the password of the sip account
            u'sip_server_transport':
            u'udp',  # the transport type (default: tcp)
            u'log_level':
            LogLevel,  # the log level (greater values provide more informations)
            u'debug': False  # enable/disable debugging messages
        }
        print(self.voip_params)

        # implement a method that will capture all the events triggered by the Voip Library
        def notify_events(voip_event_type, voip_event, params):
            print("Received Event Type:%s  Event:%s -> Params: %s" %
                  (voip_event_type, voip_event, params))

            if "error" in params:
                self.show_error(params["error"])
                return

            self.frames["OnGoingCallPage"].update_status()

            # event triggered when the account registration has been confirmed by the remote Sip Server
            if (voip_event == VoipEvent.ACCOUNT_REGISTERED):
                print("Account %s registered: ready to accept call!" %
                      self.my_voip.get_account().get_uri())

            # event triggered when a new call is incoming
            elif (voip_event == VoipEvent.CALL_INCOMING):
                print("INCOMING CALL From %s" % params["from"])
                self.show_frame("OnGoingCallPage")

            # event triggered when the call has been established
            elif (voip_event == VoipEvent.CALL_ACTIVE):
                print("The call with %s has been established" %
                      self.my_voip.get_call().get_remote_uri())

            # events triggered when the call ends for some reasons
            elif (voip_event in [
                    VoipEvent.CALL_REMOTE_DISCONNECTION_HANGUP,
                    VoipEvent.CALL_REMOTE_HANGUP, VoipEvent.CALL_HANGUP
            ]):
                print("End of call. Destroying lib...")
                # self.my_voip.destroy_lib()

            # event triggered when the library was destroyed
            elif (voip_event == VoipEvent.LIB_DEINITIALIZED):
                print("Call End. Exiting from the app.")
                end_of_call = True

            elif (voip_event == VoipEvent.CALL_DIALING):
                time.sleep(1)

            elif (voip_event == VoipEvent.LIB_INITIALIZATION_FAILED):
                print("Lib init failed. Destroying lib...")
                self.my_voip.destroy_lib()

            # just print informations about other events triggered by the library
            else:
                print("Received unhandled event type:%s --> %s" %
                      (voip_event_type, voip_event))

        # Unregister account
        # self.my_voip.unregister_account()

        # Destroy lib
        self.my_voip.destroy_lib()

        # Recreate lib
        self.my_voip = VoipLib()

        # initialize the lib passing the dictionary and the callback method defined above:
        self.my_voip.init_lib(self.voip_params, notify_events)

        # register the account
        self.my_voip.register_account()
          elif (cmd=='e'):
              myVoip.hangup_call()
              
      elif myVoip.get_call().get_state()==CallState.HOLDING:
          
          print "Server State:%s" % myVoip.get_server().get_state()
          print "Call State:%s" % myVoip.get_call().get_state()
          
          cmd = raw_input("Enter 'u' to put on unhold the call,'e' to hangup:")
          if (cmd=='u' and myVoip.get_call().get_state()==CallState.HOLDING):
              
              myVoip.unhold_call()
         
          elif (cmd=='e'): 
              
               myVoip.hangup_call()
               print "Server State:%s" % myVoip.get_server().get_state()
               print "Call State:%s" % myVoip.get_call().get_state()
               
      elif myVoip.get_call().get_state()==CallState.IDLE:
          cmd = raw_input("Enter 'q' to quit the app")
          if cmd=='q':
              myVoip.destroy_lib()
          
              
        
 
  
  
  
  
Example #4
0
class VoipTestCase(unittest.TestCase):
    def __init__(self, test_method, backend):
        # unittest.TestCase(test_method)
        super(VoipTestCase, self).__init__(test_method)

        self.voip = VoipLib(backend)
        self.holding_event_already_triggered = False
        self.curEventIndex = 0

        self.extension = "1234"

        self.params = {
            u"username": u"ste",
            u"sip_user": u"ste",
            u"sip_pwd": u"ste",
            u"sip_server": u"192.168.1.100",
            u"transport": u"udp",
            u"log_level": 1,
        }

    def account_reg_notification_cb(self, voip_event, params):
        print "Notification Event:%s - Params:%s" % (voip_event, params)
        self.voipEvent = voip_event

        self.assertEqual(
            voip_event,
            self.expectedEvents[self.curEventIndex],
            "Wrong event: %s . Expected:%s" % (self.voipEvent, self.expectedEvents[self.curEventIndex]),
        )

        self.curEventIndex += 1

        if voip_event == VoipEvent.LIB_INITIALIZED:
            self.assertTrue(self.voip.register_account())
        elif voip_event == VoipEvent.ACCOUNT_REGISTERED:
            self.assertTrue(self.voip.unregister_account())
        elif voip_event == VoipEvent.ACCOUNT_UNREGISTERED:
            self.assertTrue(self.voip.destroy_lib())
        elif voip_event == VoipEvent.LIB_DEINITIALIZED:
            print "Ok."

    def make_call_notification_cb(self, voip_event, params):
        print "Notification Event:%s - Params:%s" % (voip_event, params)
        self.voipEvent = voip_event

        self.assertEqual(
            voip_event,
            self.expectedEvents[self.curEventIndex],
            "Wrong event: %s . Expected:%s" % (self.voipEvent, self.expectedEvents[self.curEventIndex]),
        )

        self.curEventIndex += 1

        if voip_event == VoipEvent.LIB_INITIALIZED:
            self.assertTrue(self.voip.register_account())
        elif voip_event == VoipEvent.ACCOUNT_REGISTERED:
            self.assertTrue(self.voip.make_call(self.extension))
        elif voip_event == VoipEvent.CALL_DIALING:
            pass
        elif voip_event == VoipEvent.CALL_ACTIVE:
            time.sleep(2)
            self.assertTrue(self.voip.hold_call())

        elif voip_event == VoipEvent.CALL_HOLDING:
            time.sleep(0.5)
            self.assertTrue(self.voip.unhold_call())
        elif voip_event == VoipEvent.CALL_UNHOLDING:
            self.assertTrue(self.voip.hangup_call())
        elif voip_event == VoipEvent.CALL_HANGUP:
            self.assertTrue(self.voip.unregister_account())
        elif voip_event == VoipEvent.ACCOUNT_UNREGISTERED:
            self.assertTrue(self.voip.destroy_lib())
        elif voip_event == VoipEvent.LIB_DEINITIALIZED:
            print "Ok."

    def setUp(self):
        print "Running test:%s" % self._testMethodName
        self.curEventIndex = 0
        self.voipEvent = VoipEvent.Null

    def tearDown(self):
        print "Test:%s completed." % self._testMethodName
        print "-----------------------------------------------\n"

    def test_account_registration(self):

        self.expectedEvents = [
            VoipEvent.LIB_INITIALIZING,
            VoipEvent.LIB_INITIALIZED,
            VoipEvent.ACCOUNT_REGISTERING,
            VoipEvent.ACCOUNT_REGISTERED,
            VoipEvent.ACCOUNT_UNREGISTERING,
            VoipEvent.ACCOUNT_UNREGISTERED,
            VoipEvent.LIB_DEINITIALIZING,
            VoipEvent.LIB_DEINITIALIZED,
        ]

        result = self.voip.init_lib(self.params, self.account_reg_notification_cb)

        self.assertTrue(result, "Error initializing the lib!")

        while self.curEventIndex < len(self.expectedEvents):
            time.sleep(0.5)

    def test_make_call(self):

        self.expectedEvents = [
            VoipEvent.LIB_INITIALIZING,
            VoipEvent.LIB_INITIALIZED,
            VoipEvent.ACCOUNT_REGISTERING,
            VoipEvent.ACCOUNT_REGISTERED,
            VoipEvent.CALL_DIALING,
            VoipEvent.CALL_ACTIVE,
            VoipEvent.CALL_HOLDING,
            VoipEvent.CALL_UNHOLDING,
            VoipEvent.CALL_HANGUP,
            VoipEvent.ACCOUNT_UNREGISTERING,
            VoipEvent.ACCOUNT_UNREGISTERED,
            VoipEvent.LIB_DEINITIALIZING,
            VoipEvent.LIB_DEINITIALIZED,
        ]

        result = self.voip.init_lib(self.params, self.make_call_notification_cb)

        self.assertTrue(result, "Error initializing the lib!")

        while self.curEventIndex < len(self.expectedEvents):
            time.sleep(0.5)
Example #5
0
            cmd = raw_input(
                "Enter 'h' to put on hold the call,  'e' to hangup:")
            if (cmd == 'h'
                    and myVoip.get_call().get_state() == CallState.ACTIVE):
                myVoip.hold_call()
            elif (cmd == 'e'):
                myVoip.hangup_call()

        elif myVoip.get_call().get_state() == CallState.HOLDING:

            print "Server State:%s" % myVoip.get_server().get_state()
            print "Call State:%s" % myVoip.get_call().get_state()

            cmd = raw_input(
                "Enter 'u' to put on unhold the call,'e' to hangup:")
            if (cmd == 'u'
                    and myVoip.get_call().get_state() == CallState.HOLDING):

                myVoip.unhold_call()

            elif (cmd == 'e'):

                myVoip.hangup_call()
                print "Server State:%s" % myVoip.get_server().get_state()
                print "Call State:%s" % myVoip.get_call().get_state()

        elif myVoip.get_call().get_state() == CallState.IDLE:
            cmd = raw_input("Enter 'q' to quit the app")
            if cmd == 'q':
                myVoip.destroy_lib()