diff options
Diffstat (limited to 'pjsip-apps/src/py_pjsua/pjsua_app.py')
-rw-r--r-- | pjsip-apps/src/py_pjsua/pjsua_app.py | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/pjsip-apps/src/py_pjsua/pjsua_app.py b/pjsip-apps/src/py_pjsua/pjsua_app.py new file mode 100644 index 00000000..74817d32 --- /dev/null +++ b/pjsip-apps/src/py_pjsua/pjsua_app.py @@ -0,0 +1,169 @@ +import py_pjsua +import sys +import thread + +# +# Configurations +# +APP = "pjsua_app.py" +C_QUIT = 0 +C_LOG_LEVEL = 3 + +C_SIP_PORT = 5060 +C_STUN_SRV = "" +C_STUN_PORT = 3478 + +C_ACC_REGISTRAR = "" +#C_ACC_REGISTRAR = "sip:iptel.org" +C_ACC_ID = "sip:bulukucing1@iptel.org" +C_ACC_REALM = "iptel.org" +C_ACC_USERNAME = "bulukucing1" +C_ACC_PASSWORD = "netura" + +# Display PJ error and exit +def err_exit(title, rc): + py_pjsua.perror(APP, title, rc) + exit(1) + +# Logging callback +def log_cb(level, str, len): + if level >= C_LOG_LEVEL: + print str, + +# Initialize pjsua +def app_init(): + # Create pjsua before anything else + status = py_pjsua.create() + if status != 0: + err_exit("pjsua create() error", status) + + # Create and initialize logging config + log_cfg = py_pjsua.logging_config_default() + log_cfg.level = C_LOG_LEVEL + log_cfg.cb = log_cb + + # Create and initialize pjsua config + ua_cfg = py_pjsua.config_default() + ua_cfg.thread_cnt = 0 + ua_cfg.user_agent = "PJSUA/Python 0.1" + + # Create and initialize media config + med_cfg = py_pjsua.media_config_default() + med_cfg.ec_tail_len = 0 + + # + # Initialize pjsua!! + # + status = py_pjsua.init(ua_cfg, log_cfg, med_cfg) + if status != 0: + err_exit("pjsua init() error", status) + + # Configure STUN config + stun_cfg = py_pjsua.stun_config_default() + stun_cfg.stun_srv1 = C_STUN_SRV + stun_cfg.stun_srv2 = C_STUN_SRV + stun_cfg.stun_port1 = C_STUN_PORT + stun_cfg.stun_port2 = C_STUN_PORT + + # Configure UDP transport config + transport_cfg = py_pjsua.transport_config_default() + transport_cfg.port = C_SIP_PORT + transport_cfg.stun_config = stun_cfg + if C_STUN_SRV != "": + transport_cfg.use_stun = 1 + + # Create UDP transport + # Note: transport_id is supposed to be integer + status, transport_id = py_pjsua.transport_create(1, transport_cfg) + if status != 0: + py_pjsua.destroy() + err_exit("Error creating UDP transport", status) + + + # Configure account configuration + acc_cfg = py_pjsua.acc_config_default() + acc_cfg.id = C_ACC_ID + acc_cfg.reg_uri = C_ACC_REGISTRAR + acc_cfg.cred_count = 1 + acc_cfg.cred_info[0].realm = C_ACC_REALM + acc_cfg.cred_info[0].scheme = "digest" + acc_cfg.cred_info[0].username = C_ACC_USERNAME + acc_cfg.cred_info[0].data_type = 0 + acc_cfg.cred_info[0].data = C_ACC_PASSWORD + + # Add new SIP account + # Note: acc_id is supposed to be integer + status, acc_id = py_pjsua.acc_add(acc_cfg, 1) + if status != 0: + py_pjsua.destroy() + err_exit("Error adding SIP account", status) + + +# Worker thread function +def worker_thread_main(arg): + thread_desc = 0; + status = py_pjsua.thread_register("worker thread", thread_desc) + if status != 0: + py_pjsua.perror(APP, "Error registering thread", status) + else: + while C_QUIT == 0: + py_pjsua.handle_events(50) + +# Start pjsua +def app_start(): + # Done with initialization, start pjsua!! + # + status = py_pjsua.start() + if status != 0: + py_pjsua.destroy() + err_exit("Error starting pjsua!", status) + + # Start worker thread + thr = thread.start_new(worker_thread_main, (0,)) + + print "PJSUA Started!!" + + +# Print application menu +def print_menu(): + print "Menu:" + print " q Quit application" + print " s Add buddy" + print "Choice: ", + + +# Menu +def app_menu(): + quit = 0 + while quit == 0: + print_menu() + choice = sys.stdin.readline() + if choice[0] == "q": + quit = 1 + elif choice[0] == "s": + bc = py_pjsua.Buddy_Config() + print "Buddy URI: ", + bc.uri = sys.stdin.readline() + if bc.uri == "": + continue + + bc.subscribe = 1 + status = py_pjsua.buddy_add(bc) + if status != 0: + py_pjsua.perror(APP, "Error adding buddy", status) + + +# +# main +# +app_init() +app_start() +app_menu() + +# +# Done, quitting.. +# +print "PJSUA shutting down.." +C_QUIT = 1 +py_pjsua.destroy() + |