Ejemplo n.º 1
0
    def reg_user(self, user):
        """ Registers a L{User} instance in this batch to the SIP server.
        At the beginning of the simulation, users stay unregistered for some amount of time
        and this function is called when the register event is triggered.

        Along with registration, a C{PJSUA.Account} instance is attached to the user and a
        L{UserAccountCallback} instance is set to the C{Account}.

        @type   user:   User
        @param  user:   the user instance to be registered
        """
        try:
            uname = user.id + self.BASE_ID
            trans = self.lib.create_transport(pj.TransportType.UDP,
                                              pj.TransportConfig(uname))
            conf = pj.AccountConfig(self.SIP_SERVER_IP, str(uname),
                                    self.PASSWORD)
            conf.reg_timeout = user.registration_period
            conf.ka_interval = 0
            conf.transport_id = trans._id
            acc = self.lib.create_account(conf)
            user.account = acc
            acc_cb = UserAccountCallback(user)
            acc.set_callback(acc_cb)
        except Exception, e:
            print "Exception while registering user:", str(e)
Ejemplo n.º 2
0
		def _bind(self):
			# bind self.transport to self.lib	
			SIP_LOCAL_PORT = 5060
			try:
				self.transport = self.lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(SIP_LOCAL_PORT))
			except pj.Error:
				debug("Error binding transport")
				debug(pj.Error)	
Ejemplo n.º 3
0
def create_TransportConfig():
    logger.debug("create_TransportConfig")
    # Doc: http://www.pjsip.org/python/pjsua.htm#TransportConfig
    TransportConfig = pj.TransportConfig(
        port=conf.get_int(SIPPHONE_SECTION, 'transport.port', 0),
        bound_addr=conf.get(SIPPHONE_SECTION, 'transport.bound_addr', ''),
        public_addr=conf.get(SIPPHONE_SECTION, 'transport.public_addr', ''))
    return TransportConfig
Ejemplo n.º 4
0
    def run(self, domain, user, password):
        try:
            mediaconfig = pj.MediaConfig()
            mediaconfig.quality = 10
            self.lib.init(log_cfg=pj.LogConfig(level=4, callback=self.log_cb),
                          media_cfg=mediaconfig)
            transport = self.lib.create_transport(pj.TransportType.UDP,
                                                  pj.TransportConfig())
            self.lib.start()

            # Put your sIP client credentials here
            acc = self.lib.create_account(
                pj.AccountConfig(domain=domain,
                                 username=user,
                                 password=password))

            acc_cb = MyAccountCallback(app=self, account=acc)
            acc.set_callback(acc_cb)
            acc_cb.wait()

            print "\n"
            print "Registration complete, status=", acc.info().reg_status, \
                "(" + acc.info().reg_reason + ")"

            if len(sys.argv) > 1:
                lck = self.lib.auto_lock()

            my_sip_uri = "sip:" + transport.info().host + \
                         ":" + str(transport.info().port)

            # Menu loop
            while True:
                print "My SIP URI is", my_sip_uri
                print "Menu: h=hangup call, q=quit"

                input = sys.stdin.readline().rstrip("\r\n")

                if input == "h":
                    if not self.current_call:
                        print "There is no call"
                        continue
                    self.current_call.hangup()
                    self.reset_all()

                elif input == "q":
                    break

            # shutdown the library
            transport = None

            self.lib.destroy()
            self.lib = None

        except pj.Error, e:
            print "Exception: " + str(e)
            self.lib.destroy()
            lib = None
Ejemplo n.º 5
0
 def _init_lib(self) -> None:
     self.lib = pjsua.Lib()
     self.lib.init(log_cfg=pjsua.LogConfig(level=logging.DEBUG))
     pjsua_port = random.randint(5080, 6080)
     self.transports = dict(
         t1=self.lib.create_transport(pjsua.TransportType.UDP, pjsua.TransportConfig(pjsua_port))
     )
     self.lib.start()
     self.lib.handle_events()
Ejemplo n.º 6
0
    def register(self,
                 server,
                 port,
                 username,
                 password,
                 default_account=False,
                 proxy=None,
                 protocol='UDP',
                 bind_address='127.0.0.1',
                 bind_port=0):
        """ Register an account at i.e. Asterisk PBX, and set network transport options.
            Returns: Account registered, account callback handler.
        """
        if protocol == 'UDP': protocol = pj.TransportType.UDP
        elif protocol == 'TCP': protocol = pj.TransportType.TCP
        elif protocol == 'TLS': protocol = pj.TransportType.TLS
        else: logger.info(f"Error: Invalid protocol type.")

        logger.info("Creating transport and generating SIP URI.")
        transport = self.lib.create_transport(
            protocol,
            pj.TransportConfig(
                0
            )  # TransportConfig(host=bind_address, port=bind_port) # TODO: Add bind_address and bind_port here.
        )

        public_sip_uri = f"sip:{username}@{str(transport.info().host)}:{str(transport.info().port)}"
        logger.info(
            f"Listening on {transport.info().host}:{transport.info().port} for {public_sip_uri}."
        )
        logger.info(
            f"Attempting registration for {public_sip_uri} at {server}:{port}."
        )

        account_cfg = pj.AccountConfig(domain=server + ":" + port,
                                       username=username,
                                       password=password)

        account_cfg.id = public_sip_uri

        account = self.lib.create_account(acc_config=account_cfg,
                                          set_default=default_account)
        account.set_transport(transport)

        account_handler = AccountHandler(lib=self.lib, account=account)
        account.set_callback(account_handler)

        logger.info(f"Waiting for registration...")
        account_handler.wait()
        logger.info(
            f"Successfully registered {public_sip_uri}, status: {account.info().reg_status} ({account.info().reg_reason})."
        )

        return account
Ejemplo n.º 7
0
def sip_registration(lib, conf_params):
    global acc, common_objects
    lib.init(log_cfg=pj.LogConfig(level=1, callback=log_cb))

    transport = lib.create_transport(pj.TransportType.UDP,
                                     pj.TransportConfig(0))
    lib.start()

    acc = lib.create_account(
        pj.AccountConfig(conf_params['elx_host'], conf_params['sip_user'],
                         conf_params['sip_pass']))

    acc_cb = MyAccountCallback(acc)
    acc.set_callback(acc_cb)
    acc_cb.wait()
Ejemplo n.º 8
0
 def register_all(self):
     trans = {}
     accs = []
     for user in self.users:
         uname = user.id + self.BASE_ID
         trans[user.id] = self.lib.create_transport(
             pj.TransportType.UDP, pj.TransportConfig(uname))
         uname = user.id + self.BASE_ID
         conf = pj.AccountConfig(self.SIP_SERVER_IP, str(uname),
                                 self.PASSWORD)
         conf.reg_timeout = 1000000
         conf.ka_interval = 0
         conf.transport_id = trans[user.id]._id
         accs.append(self.lib.create_account(conf))
     return trans, accs
Ejemplo n.º 9
0
    def start(self):
        ua = pj.UAConfig()
        ua.nameserver = ['8.8.8.8', '8.8.4.4']
        ua.user_agent = "PJSIP Python EasyPhone"

        media = pj.MediaConfig()
        media.enable_ice = True

        logger = pj.LogConfig(level=self.verbose, callback=logger_callback)

        self.pjsip.init(ua_cfg=ua, media_cfg=media, log_cfg=logger)
        self.pjsip.create_transport(pj.TransportType.TCP, pj.TransportConfig())
        self.pjsip.set_null_snd_dev()
        self.pjsip.start()
        self.pjsip.handle_events()
Ejemplo n.º 10
0
    def __init__(self):
        #self.__account_cb=self.MyAccountCallback()
        #self.__call_cb=self.MyCallCallback
        self.__lib = pj.Lib()
        self.__lib.init(log_cfg=pj.LogConfig(3, callback=self.__log_cb))
        self.__transport = self.__lib.create_transport(pj.TransportType.UDP,
                                                       pj.TransportConfig(0))
        print "\nListening on", self.__transport.info().host,
        print "port", self.__transport.info().port, "\n"

        self.__lib.start(True)
        self.__acc = self.__lib.create_account_for_transport(
            self.__transport, cb=self.MyAccountCallback(self))

        self.__self_uri = "sip:" + self.__transport.info().host + ":" + str(
            self.__transport.info().port)
Ejemplo n.º 11
0
    def __create_transport(self, cfg):
        """Create a PJSUA transport from a transport configuration."""
        def __to_pjprotocol(prot_str, is_v6):
            """
            Translate a string protocol to an enumerated type for PJSUA.

            PJSUA's enumerations require both the transport protocol to be used
            and whether IPv6 is being used.
            """
            if prot_str == 'udp':
                if is_v6:
                    return pj.TransportType.UDP_IPV6
                else:
                    return pj.TransportType.UDP
            elif prot_str == 'tcp':
                if is_v6:
                    return pj.TransportType.TCP_IPV6
                else:
                    return pj.TransportType.TCP
            elif prot_str == 'tls':
                if is_v6:
                    LOGGER.error("PJSUA python bindings do not support IPv6"
                                 "with TLS")
                    self.test_object.stop_reactor()
                else:
                    return pj.TransportType.TLS
            else:
                return pj.TransportType.UNSPECIFIED

        protocol = (cfg.get('protocol', 'udp')).lower()
        bind = cfg.get('bind', '127.0.0.1')
        bindport = cfg.get('bindport', '5060')
        public_addr = cfg.get('public_addr', '')
        is_v6 = False

        try:
            socket.inet_pton(socket.AF_INET6, bind)
            is_v6 = True
        except socket.error:
            # Catching an exception just means the address is not IPv6
            pass

        pj_protocol = __to_pjprotocol(protocol, is_v6)
        LOGGER.info("Creating transport config %s:%s" % (bind, bindport))
        transport_cfg = pj.TransportConfig(int(bindport), bind, public_addr)
        return self.lib.create_transport(pj_protocol, transport_cfg)
Ejemplo n.º 12
0
 def __init__(self,lib=None):
     if lib:
         self.lib=lib
     elif pj.Lib.instance():
         self.lib=pj.Lib.instance()
     else:
         self.lib = pj.Lib()
         ua=pj.UAConfig()
         ua.max_calls=40
         self.lib.init(log_cfg = pj.LogConfig(level=2,callback=log_cb),ua_cfg=ua)  
         self._transport=self.lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(0))
         self.lib.start()  
     devs=self.lib.enum_snd_dev()
     if not len(devs):
         self.lib.set_null_snd_dev()
     self.player=Player()
     self.created={}
Ejemplo n.º 13
0
 def init(self):
     self.status = States.init
     self.lib = pj.Lib()
     self.cfg_ua = pj.UAConfig()
     self.cfg_md = pj.MediaConfig()
     self.cfg_ua.max_calls, self.cfg_ua.user_agent = 32, "TrashTalker/1.0"
     self.cfg_md.no_vad, self.cfg_md.enable_ice = True, False
     self.cfg_lg = pj.LogConfig(level=self.LOG_LEVEL, callback=PJLog)
     self.lib.init(ua_cfg=cfg_ua, media_cfg=cfg_md, log_cfg=cfg_lg)
     self.lib.set_null_snd_dev()
     self.lib.start(with_thread=True)
     self.transport = self.lib.create_transport(
         pj.TransportType.UDP, pj.TransportConfig(self.port))
     self.account = self.lib.create_account_for_transport(self.transport,
                                                          cb=AccountCb())
     self.uri = "sip:%s:%s" % (self.transport.info().host,
                               self.transport.info().port)
     self.status &= States.done
Ejemplo n.º 14
0
    def reg_attack(self):
        trans = {}
        for user in self.users:
            uname = user.id + self.BASE_ID
            trans[user.id] = self.lib.create_transport(
                pj.TransportType.UDP, pj.TransportConfig(uname))
        while True:
            for user in self.users:
                try:
                    uname = user.id + self.BASE_ID
                    conf = pj.AccountConfig(self.SIP_SERVER_IP, str(uname),
                                            self.PASSWORD)
                    conf.transport_id = trans[user.id]._id
                    acc = self.lib.create_account(conf)
                    acc.delete()
                except Exception, e:
                    print "Exception while registering user:", str(e)

            time.sleep(3)
Ejemplo n.º 15
0
    def setUp(self):
        self.assertTrue(self.AH_Agent.isConnected(),
                        "AH_Agent connection failure")

        if self.lib == None:
            self.lib = pjsua.Lib()

        self.lib.init(log_cfg=pjsua.LogConfig(
            level=0, filename='PJSUA.log', callback=None, console_level=0))
        self.lib.set_null_snd_dev()
        self.lib.create_transport(pjsua.TransportType.UDP,
                                  pjsua.TransportConfig(5060))
        self.lib.start()
        self.acc = self.lib.create_account(
            pjsua.AccountConfig(config.PBX_Host, "test1", "12345"))
        self.assertTrue(self.acc.is_valid(), "invalid account")
        acc_cb = MyAccountCallback(self.acc)
        self.acc.set_callback(acc_cb)
        acc_cb.wait()

        self.assertTrue(acc_cb.account.info().reg_status >= 200,
                        "Could not register")
Ejemplo n.º 16
0
    def connect(self):

        self.logger.info('Connecting SIP device.')
        lib = pj.Lib.instance()

        self.metrics['connect'] = {}
        self.metrics['handled_sms'] = []
        self.metrics['handled_call'] = []
        self.metrics['send_sms'] = []
        self.metrics['dial_call'] = []

        if not self._login():
            self.logger.error('Login error')
            return False
        if not self._authenticate():
            self.logger.error('Authentication error')
            return False

        ## Transport / Listener
        try:
            self.logger.debug('Creating transport...')
            tr = lib.create_transport(
                pj.TransportType.TLS,
                pj.TransportConfig(random.randint(1024, 64 * 1024), '0.0.0.0'))
            self.logger.debug(
                'Transport created. Type:%s, description:%s, is_reliable:%s, is_secure:%s, is_datagram:%s, host:%s, port:%s, ref_cnt:%s',
                tr.info().type,
                tr.info().description,
                tr.info().is_reliable,
                tr.info().is_secure,
                tr.info().is_datagram,
                tr.info().host,
                tr.info().port,
                tr.info().ref_cnt)
        except pj.Error, e:
            self.logger.error('Error creating transport:', e)
Ejemplo n.º 17
0
    def wait(self):
        self.sem = threading.Semaphore(0)
        self.sem.acquire()

    def on_reg_state(self):
        if self.sem:
            if self.account.info().reg_status >= 200:
                self.sem.release()


lib = pj.Lib()

try:
    lib.init(log_cfg=pj.LogConfig(level=4, callback=log_cb))
    lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(5080))
    lib.start()

    acc = lib.create_account(pj.AccountConfig("pjsip.org", "bennylp", "***"))

    acc_cb = MyAccountCallback(acc)
    acc.set_callback(acc_cb)
    acc_cb.wait()

    print("\n")
    print("Registration complete, status=", acc.info().reg_status, \
          "(" + acc.info().reg_reason + ")")
    print("\nPress ENTER to quit")
    sys.stdin.readline()

    lib.destroy()
Ejemplo n.º 18
0
    if echo_cancel_type != -1:
        media_cfg.ec_options = echo_cancel_type
    if echo_cancel_tail != -1:
        media_cfg.ec_tail_len = echo_cancel_tail
    if quality != -1:
        media_cfg.quality = quality
    if channel_count != -1:
        media_cfg.channel_count = channel_count

    media_cfg.no_vad = no_vad

    lib.init(ua_cfg, loging_cfg, media_cfg)

    lib.set_snd_dev(audio_dev_in, audio_dev_out)

    my_transport_cfg = pj.TransportConfig()
    my_transport_cfg.port = rtp_port
    transport = lib.create_transport(pj.TransportType.UDP, my_transport_cfg)

    lib.start()

    my_account_cfg = pj.AccountConfig(sip_registrar, user, password)
    acc = lib.create_account(my_account_cfg)

    acc_cb = MyAccountCallback(acc)
    acc.set_callback(acc_cb)
    acc_cb.wait()

    log("Registration complete, status=" + str(acc.info().reg_status) + "(" +
        str(acc.info().reg_reason) + ")")
Ejemplo n.º 19
0
    def __init__(self):
        super( Example,self ).__init__()
         
        self.initUI()
        lib = pj.Lib()

        current_call = None

        my_ua_cfg = pj.UAConfig()
        my_ua_cfg.nameserver = ['8.8.8.8', '8.8.4.4']
        my_ua_cfg.user_agent = "hanxiaotian_bupt"
        # http://www.pjsip.org/python/pjsua.htm#MediaConfig
        my_media_cfg = pj.MediaConfig()
        my_media_cfg.enable_ice = True
    
        #
        # Procedure: Initialize > Create Transpot > Start > Handle calls > Shutdown
        #

        # https://trac.pjsip.org/repos/wiki/Python_SIP/Settings#StartupandShutdown
        # Initialize the Library
        lib.init(ua_cfg=my_ua_cfg, media_cfg=my_media_cfg, log_cfg = pj.LogConfig(level=3, callback=log_cb))
    
        # Create One or More Transports
        transport = lib.create_transport(pj.TransportType.TCP, pj.TransportConfig())
        #transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(0))
        #transport = lib.create_transport(pj.TransportType.TLS, pj.TransportConfig(port=5060)) # SSL
        lib.set_null_snd_dev()

        # Starting the Library
        lib.start()
        lib.handle_events()

        #
        # Registration
        #
        acc_cfg = pj.AccountConfig()
        succeed = 0
        while (succeed == 0):
            print "---------------------------------------------------------------------"
            acc_cfg.id = "sip:[email protected]"
            # 
            acc_cfg.reg_uri  = "sip:10.103.241.142;transport=tcp"
            #
            acc_cfg.proxy = [] 
       
            server = "10.103.241.142"
            acc_cfg.proxy = [ "sip:10.103.241.142;transport=tcp;lr" ]
            #
            realm = "han"
            #
            username = "******"
            #
            passwd = "101"
            print "---------------------------------------------------------------------"
    
            acc_cfg.auth_cred = [pj.AuthCred(realm, username ,passwd)]
            
            self.acc_cb = MyAccountCallback()
            self.acc = lib.create_account(acc_cfg, cb=self.acc_cb)
            self.acc_cb.wait()
    
            # Conditions are not correct, because when "IP address change detected for account", all other accounts is Forbidden
            if ((str(self.acc.info().reg_status) == "200") or (str(self.acc.info().reg_status) == "403")):
                succeed = 1
            else:
                print ""
                print "Registration failed, status=", self.acc.info().reg_status, \
                  "(" + self.acc.info().reg_reason + ")"
                print ""
                print "Please try again !"
Ejemplo n.º 20
0
    global call_slot
    current_call = None
    recorderid = None
    playerid = None
    call_slot = None


lib = pj.Lib()

try:
    mediaconfig = pj.MediaConfig()
    mediaconfig.quality = 10
    lib.init(log_cfg=pj.LogConfig(
        level=4, callback=log_cb), media_cfg=mediaconfig)
    transport = lib.create_transport(
        pj.TransportType.UDP, pj.TransportConfig())
    lib.start()

    # Put your sIP client credentials here
    acc = lib.create_account(pj.AccountConfig(
        "10.208.209.59", "1000", "1000"))

    acc_cb = MyAccountCallback(acc)
    acc.set_callback(acc_cb)
    acc_cb.wait()

    print "\n"
    print "Registration complete, status=", acc.info().reg_status, \
          "(" + acc.info().reg_reason + ")"

    if len(sys.argv) > 1:
	def Active_state(self):
		print("Call is :", self.call.info().state_text),
		print("last code :", self.call.info().last_code),
		print("(" + self.call.info().last_reason + ")")

#Disconnection
		if (self.call.info().state_text == 'DISCONNCTD'):
			print 'Press anykey to Unregister.....'
			return
			try:
#Instance creation
				sip_lib = sip.Lib()
				sip_lib.init(log_cfg = sip.LogConfig(level=3, callback=log_cb))

#creating Transport Object Instance...
				client_IP_address = raw_input('Enter Client IP address :')
				transport_socket = sip.TransportConfig()
				transport_socket.port = 5060
				transport_socket.bound_addr = client_IP_address
				print('Binding IP ' + client_IP_address + 'to default port no 5060.....'),
				transport_bind =sip_lib.create_transport(sip.TransportType.UDP,transport_socket)
				print('OK')

#Starting SIP libraries
				sip_lib.start()
				sip_lib.set_null_snd_dev()
#Starting Registering Process
				r_IP=raw_input("Enter IP address of the Server: ")
				r_name=raw_input("Enter Username: "******"Enter Password: "******"sip:%s" % (r_name)
				conf_of_account.reg_uri ='sip:%s:%s' % (r_IP,transport_socket.port)
				account_callback = Calling_back_account(conf_of_account)
				acc = sip_lib.create_account(conf_of_account,cb=account_callback)
#Setting value to Calling_back_account class

				acc.set_callback(account_callback)
				print('Status= ',acc.info().reg_status,'(' + acc.info().reg_reason + ')')
				time.sleep(5)
				print 'Registration is Complete....'
				Reg_unreg=raw_input("you want to unregister?...")
				if (Reg_unreg=="y"):
					acc.set_registration(False)
				else:
#Cll
					c_ID = raw_input('Enter UID to make call : ')
					print 'Calling %s.....' % (c_ID)
					s_URI = 'sip:%s@%s:%s' % (c_ID,r_IP,transport_socket.port)
					call = acc.make_call(s_URI, SRCallCallback(acc))
					#Unreg
					input = sys.stdin.readline().rstrip('\r\n')
					print 'Unregistering.....'
					time.sleep(2)
					sip_lib.destroy()
					time.sleep(2)
					sip_lib= None
					sys.exit(1)
#Excpt
				except sip.Error, err:
					print 'Initializations Error', err
					sip_lib.destroy()
Ejemplo n.º 22
0
    try:
        print "call is connecting to", uri
        return account_C.connect_call(uri, cb=CallBackforCurrCall())
    except pj.Error, e:
        print "Details of encountered exception in making call: " + str(e)
        return None


#Main : Program starts here
#Library instance is created for lib class
lib = pj.Lib()

try:
    lib.init(log_cfg=pj.LogConfig(level=Log_Value, callback=log_callback))
    transport = lib.create_transport(pj.TransportType.UDP,
                                     pj.TransportConfig(0))
    lib.start()

    account_C = lib.create_account(
        pj.AccountConfig("192.168.137.1", "2020", "password"))
    acc_cb = CallbckforAccount(account_C)
    account_C.set_callback(acc_cb)
    print "\n"
    print "Status of the completed Registration =", account_C.info(
    ).reg_status, "(" + account_C.info().reg_reason + ")"

    if len(sys.argv) > 1:
        lck = lib.auto_lock()
        on_call = connect_call(sys.argv[1])
        print 'Current call is', on_call
        del lck
Ejemplo n.º 23
0
            call_slot = self.call.info().conf_slot
            libObj.instance().conf_connect(call_slot, 0)
            libObj.instance().conf_connect(0, call_slot)


# Main Program
try:
    # Starting of the Main Class
    # Step 1: First we need to Create library instance - which is the base class for the rest of the classes
    libObj = pj.Lib()

    # Step 2: Instantiating the library with the default configuration
    libObj.init(log_cfg=pj.LogConfig(level=3, callback=log_cb))

    # Step 3: Configuring the Transport Object
    transObj = pj.TransportConfig()

    print "************************REGISTRATION PROCESS BEGINS************************"
    # Step 4: Define the SIP Port
    transObj.port = 5060

    # Step 5: Let the PJSIP know the client machine address
    clientIP = raw_input("python SIPClient IP : ")
    print "Using default SIP Port: 5060\n\n"
    transObj.bound_addr = clientIP
    transport = libObj.create_transport(pj.TransportType.UDP, transObj)
    # Starting the Library class
    libObj.start()
    libObj.set_null_snd_dev()
    #Information to create header of REGISTER SIP message
    serverIP = raw_input("Proxy Server IP address:")
Ejemplo n.º 24
0
def main(argv):
    global broker
    global pj
    global lib
    global args

    app_name = "SIP2MQTT"

    parser = argparse.ArgumentParser(
        description=
        'A SIP monitoring tool that publishes incoming calls with CallerID to an MQTT channel'
    )
    requiredNamed = parser.add_argument_group('required named arguments')

    requiredNamed.add_argument("-a",
                               "--mqtt_domain",
                               type=str,
                               required=True,
                               help="the MQTT broker domain string",
                               default=os.environ.get('MQTT_DOMAIN', None))
    requiredNamed.add_argument("-t",
                               "--mqtt_port",
                               type=int,
                               required=True,
                               help="the MQTT broker port number",
                               default=os.environ.get('MQTT_PORT', None))
    parser.add_argument("--mqtt_keepalive",
                        type=int,
                        required=False,
                        help="the MQTT broker keep alive in seconds",
                        default=60)
    parser.add_argument("--mqtt_protocol",
                        type=str,
                        required=False,
                        help="the MQTT broker protocol",
                        default="MQTTv311",
                        choices=['MQTTv31', 'MQTTv311'])
    requiredNamed.add_argument("-u",
                               "--mqtt_username",
                               type=str,
                               required=True,
                               help="the MQTT broker username",
                               default=os.environ.get('MQTT_USERNAME', None))
    requiredNamed.add_argument("-p",
                               "--mqtt_password",
                               type=str,
                               required=False,
                               help="the MQTT broker password",
                               default=os.environ.get('MQTT_PASSWORD', None))
    parser.add_argument("--mqtt_topic",
                        type=str,
                        required=False,
                        help="the MQTT broker topic",
                        default=os.environ.get('MQTT_TOPIC', "home/sip"))

    requiredNamed.add_argument("-d",
                               "--sip_domain",
                               type=str,
                               required=True,
                               help="the SIP domain",
                               default=os.environ.get('SIP_DOMAIN', None))
    parser.add_argument("--sip_port",
                        type=int,
                        required=False,
                        help="the SIP transport port number",
                        default=os.environ.get('SIP_PORT', 5060))
    requiredNamed.add_argument("-n",
                               "--sip_username",
                               type=str,
                               required=True,
                               help="the SIP username",
                               default=os.environ.get('SIP_USERNAME', None))
    requiredNamed.add_argument("-s",
                               "--sip_password",
                               type=str,
                               required=False,
                               help="the SIP password",
                               default=os.environ.get('SIP_PASSWORD', None))
    parser.add_argument("--sip_display",
                        type=str,
                        required=False,
                        help="the SIP user display name",
                        default=app_name)

    parser.add_argument("--log_level",
                        type=int,
                        required=False,
                        help="the application log level",
                        default=3,
                        choices=[0, 1, 2, 3])
    parser.add_argument("-v",
                        "--verbosity",
                        action="count",
                        help="increase output verbosity",
                        default=3)

    args = parser.parse_args()

    log_level = logging.INFO  #Deault logging level
    if args.verbosity == 1:
        log_level = logging.ERROR
    elif args.verbosity == 2:
        log_level = logging.WARN
    elif args.verbosity == 3:
        log_level = logging.INFO
    elif args.verbosity >= 4:
        log_level = logging.DEBUG

    # Configure logging
    # logging.basicConfig(filename="sip2mqtt.log", format="%(asctime)s - %(levelname)s - %(message)s",
    #                     datefmt="%m/%d/%Y %I:%M:%S %p", level=log_level)
    root = logging.getLogger()
    root.setLevel(log_level)

    #    ch = logging.StreamHandler(sys.stdout)
    #    ch.setLevel(log_level)
    #    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    #    ch.setFormatter(formatter)
    #    root.addHandler(ch)
    # A more docker-friendly approach is to output to stdout
    logging.basicConfig(stream=sys.stdout,
                        format="%(asctime)s - %(levelname)s - %(message)s",
                        datefmt="%m/%d/%Y %I:%M:%S %p",
                        level=log_level)

    # Log startup messages and our configuration parameters
    logging.info("------------------------")
    logging.info("Starting up...")
    logging.info("--- MQTT Broker Configuration ---")
    logging.info("Domain: " + args.mqtt_domain)
    logging.info("Port: " + str(args.mqtt_port))
    logging.info("Protocol: " + args.mqtt_protocol)
    logging.info("Username: "******"Keepalive Interval: " + str(args.mqtt_keepalive))
    logging.info("Status Topic: " + args.mqtt_topic)
    logging.info("--- SIP Configuration ---")
    logging.info("Domain: " + args.sip_domain)
    logging.info("Username: "******"DisplayName: " + args.sip_display)

    try:
        # Handle mqtt connection and callbacks
        broker = mqtt.Client(client_id="",
                             clean_session=True,
                             userdata=None,
                             protocol=eval("mqtt." + args.mqtt_protocol))
        broker.username_pw_set(args.mqtt_username, password=args.mqtt_password)
        broker.on_connect = mqtt_connect
        #broker.on_message = mqtt_message #don't need this callback for now
        broker.connect(args.mqtt_domain, args.mqtt_port, args.mqtt_keepalive)

        # Create library instance of Lib class
        lib = pj.Lib()

        ua = pj.UAConfig()
        ua.user_agent = app_name

        mc = pj.MediaConfig()
        mc.clock_rate = 8000

        lib.init(ua_cfg=ua,
                 log_cfg=pj.LogConfig(level=args.verbosity, callback=None),
                 media_cfg=mc)
        lib.create_transport(pj.TransportType.UDP,
                             pj.TransportConfig(args.sip_port))
        lib.set_null_snd_dev()
        lib.start()

        acc_cfg = pj.AccountConfig()
        acc_cfg.id = "sip:" + args.sip_username + "@" + args.sip_domain
        acc_cfg.reg_uri = "sip:" + args.sip_domain
        acc_cfg.auth_cred = [
            pj.AuthCred(args.sip_domain, args.sip_username, args.sip_password)
        ]
        acc_cfg.allow_contact_rewrite = False

        acc = lib.create_account(acc_cfg)
        acc_cb = SMAccountCallback(acc)
        acc.set_callback(acc_cb)

        logging.info("-- Registration Complete --")
        logging.info('SIP: Status = ' + str(acc.info().reg_status) + ' (' +
                     acc.info().reg_reason + ')')

    except pj.Error, e:
        logging.critical(("Exception: " + str(e)))
        lib.destroy()
        sys.exit(1)
Ejemplo n.º 25
0
        #Connecting the call to a different sound device
        call_slot = self.call.info().conf_slot
        lib.conf_connect(call_slot, 0)
        lib.conf_connect(0, call_slot)
        print ("Hi. Have a nice day!")
        print (lib)

# Main loop Part
try:
    # Starting
    # Creating the library instance of Lib Class
    lib = pj.Lib()
    # Instantiate library with default configuration
    lib.init(log_cfg = pj.LogConfig(level=3, callback=log_cb))
    # UDP configuration by binding up with 5060
    trans_conf = pj.TransportConfig()

    print "--------REGISTRATION STARTS BELOW--------"
    print "\n\n"

    trans_conf.port = 5060
    client_IP=raw_input ("Enter the IP Adderess of your client :     ")
    print "Port number for SIP calls: 5060"

    trans_conf.bound_addr = client_IP
    transport = lib.create_transport(pj.Transporttype.UDP,trans_conf)
    # Initiate the instance for Library Class
    lib.start()
    lib.set_null_snd_dev()
    #Registration server configuration
    #creating header sip register
Ejemplo n.º 26
0
    my_media_cfg = pj.MediaConfig()
    my_media_cfg.enable_ice = True

    #
    # Procedure: Initialize > Create Transpot > Start > Handle calls > Shutdown
    #

    # https://trac.pjsip.org/repos/wiki/Python_SIP/Settings#StartupandShutdown
    # Initialize the Library
    lib.init(ua_cfg=my_ua_cfg,
             media_cfg=my_media_cfg,
             log_cfg=pj.LogConfig(level=3, callback=log_cb))

    # Create One or More Transports
    transport = lib.create_transport(pj.TransportType.TCP,
                                     pj.TransportConfig())
    #transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(0))
    #transport = lib.create_transport(pj.TransportType.TLS, pj.TransportConfig(port=5060)) # SSL
    lib.set_null_snd_dev()

    # Starting the Library
    lib.start()
    lib.handle_events()

    #
    # Registration
    #
    acc_cfg = pj.AccountConfig()
    os.system('clear')
    print "sipclient.py -- Simple SIP Client use PJSUA Python Module (PJSIP API)"
    print ""
Ejemplo n.º 27
0
        print "Making call to", uri
        return acc.make_call(uri, cb=MyCallCallback())
    except pj.Error, e:
        print "Exception: " + str(e)
        return None


# Create library instance
lib = pj.Lib()

try:
    # Initialize library
    lib.init(log_cfg=pj.LogConfig(level=LOG_LEVEL, callback=log_callback))

    # Configuring one Transport Object
    tran_conf = pj.TransportConfig()
    tran_conf.bound_addr = "192.168.100.50"  # IP address of PJSIP client
    transport = lib.create_transport(pj.TransportType.UDP,
                                     pj.TransportConfig(0))
    print "\nListening on", transport.info().host, "\n"

    # Start library
    lib.start()

    # Configuring Account class to register with Registrar server
    acc_conf = pj.AccountConfig(domain='192.168.100.50',
                                username='******',
                                password='******',
                                display='2050',
                                registrar='sip:192.168.100.1',
                                proxy='sip:192.168.100.1')
Ejemplo n.º 28
0
            'text':
            '```Nova ligação de %s em %s```' %
            (info.remote_contact, time.strftime("%Y-%m-%d %H:%M"))
        }
        urllib2.urlopen("https://api.telegram.org/bot%s/sendMessage?%s" %
                        (telegramBotId, urllib.urlencode(data))).read()


try:
    # Create library instance
    lib = pj.Lib()

    # Init library with default config
    lib.init(log_cfg=pj.LogConfig(level=3, callback=log_cb))

    transportConfig = pj.TransportConfig()
    transportConfig.port = 5080

    # Create UDP transport which listens to any available port
    transport = lib.create_transport(pj.TransportType.UDP, transportConfig)

    # Start the library
    lib.start()

    acc_cfg = pj.AccountConfig()
    acc_cfg.id = "%s" % sipId
    acc_cfg.reg_uri = "%s" % sipRegUrl
    acc_cfg.proxy = ["%s" % sipProxy]
    acc_cfg.auth_cred = [pj.AuthCred("*", "%s" % sipUser, "%s" % sipPassword)]

    acc_ck = CallbackAccount()
Ejemplo n.º 29
0
    med_conf.jb_max = 0
    med_conf.jb_min = 0
    med_conf.max_media_ports = 1020

    ua_config = pj.UAConfig()
    ua_config.max_calls = 1000

    lib.init(ua_cfg=ua_config,
             log_cfg=pj.LogConfig(level=7, callback=log_cb),
             media_cfg=med_conf)
    # Remedy the non availibility of sound device
    lib.set_null_snd_dev()

    # Create UDP transport which listens to any available port
    transport = lib.create_transport(pj.TransportType.UDP,
                                     pj.TransportConfig(VOIP_SERVER_PORT))

    RECORDING = True
    lib.start()

    # configure client account
    acc_cfg = pj.AccountConfig()
    acc_cfg.id = "sip:" + SIP_CALLER_ID + "@" + VOIP_SERVER
    acc_cfg.reg_uri = "sip:" + VOIP_SERVER
    acc_cfg.proxy = ["sip:" + VOIP_SERVER]
    acc_cfg.auth_cred = [
        pj.AuthCred(VOIP_SERVER, SIP_CALLER_ID, SIP_CALLER_PASSWORD)
    ]

    acc = lib.create_account(acc_cfg)
    acc_cb = MyAccountCallback(acc)
Ejemplo n.º 30
0
# Set of admins. If empty then everyone is admin!
admins = set([])

# acc_cfg holds the account config (set it to None to disable account)
acc_cfg = None
acc_cfg = pj.AccountConfig()
if acc_cfg:
	acc_cfg.id = "sip:[email protected]"
	acc_cfg.reg_uri = "sip:pjsip.org"
	acc_cfg.proxy = [ "sip:pjsip.org;lr;transport=tcp" ]
	acc_cfg.auth_cred = [ pj.AuthCred("*", "bot", "secretpass") ]
	acc_cfg.publish_enabled = True
	#acc_cfg.require_timer = True

# Transport configs (set them to None to disable the transport)
udp_cfg = pj.TransportConfig(5080)
tcp_cfg = pj.TransportConfig(0)
#tcp_cfg = None

# Logging Config (you can also set it to None to use default values)
def log_cb(level, str, len):
	print str,
	
log_cfg = pj.LogConfig()
#log_cfg.callback = log_cb

# UA Config (you can also set it to None to use default values)
ua_cfg = pj.UAConfig()
ua_cfg.user_agent = "PJSIP ConfBot"
ua_cfg.stun_host = "stun.pjsip.org"