示例#1
0
def xfer_call():
	global g_current_call
	
	if g_current_call == -1:
		
		write_log(3, "No current call")

	else:
		call = g_current_call		
		ci = py_pjsua.call_get_info(g_current_call)
		print "Transfering current call ["+ `g_current_call` + "] " + ci.remote_info
		print "Enter sip url : "
		url = sys.stdin.readline()
		if url == "\n": 
			return
		url = url.replace("\n", "")
		if call != g_current_call:
			print "Call has been disconnected"
			return
		msg_data = py_pjsua.msg_data_init()
		status = py_pjsua.call_xfer(g_current_call, url, msg_data);
		if status != 0:
			py_pjsua.perror(THIS_FILE, "Error transfering call ", status)
		else:		
			write_log(3, "Call transfered to " + url)
示例#2
0
def worker_thread_main(arg):
	global C_QUIT
	thread_desc = 0;
	status = py_pjsua.thread_register("python worker", thread_desc)
	if status != 0:
		py_pjsua.perror(THIS_FILE, "Error registering thread", status)
	else:
		while C_QUIT == 0:
			py_pjsua.handle_events(50)
		print "Worker thread quitting.."
		C_QUIT = 2
示例#3
0
def add_account():
	global g_acc_id

	acc_domain = ""
	acc_username = ""
	acc_passwd =""
	confirm = ""
	
	# Input account configs
	print "Your SIP domain (e.g. myprovider.com): ",
	acc_domain = sys.stdin.readline()
	if acc_domain == "\n": 
		return
	acc_domain = acc_domain.replace("\n", "")

	print "Your username (e.g. alice): ",
	acc_username = sys.stdin.readline()
	if acc_username == "\n":
		return
	acc_username = acc_username.replace("\n", "")

	print "Your password (e.g. secret): ",
	acc_passwd = sys.stdin.readline()
	if acc_passwd == "\n":
		return
	acc_passwd = acc_passwd.replace("\n", "")

	# Configure account configuration
	acc_cfg = py_pjsua.acc_config_default()
	acc_cfg.id = "sip:" + acc_username + "@" + acc_domain
	acc_cfg.reg_uri = "sip:" + acc_domain

	cred_info = py_pjsua.Pjsip_Cred_Info()
	cred_info.realm = "*"
	cred_info.scheme = "digest"
	cred_info.username = acc_username
	cred_info.data_type = 0
	cred_info.data = acc_passwd

	acc_cfg.cred_info.append(1)
	acc_cfg.cred_info[0] = cred_info

	# Add new SIP account
	status, acc_id = py_pjsua.acc_add(acc_cfg, 1)
	if status != 0:
		py_pjsua.perror(THIS_FILE, "Error adding SIP account", status)
	else:
		g_acc_id = acc_id
		write_log(3, "Account " + acc_cfg.id + " added")
示例#4
0
def add_account():
    global g_acc_id

    acc_domain = ""
    acc_username = ""
    acc_passwd = ""
    confirm = ""

    # Input account configs
    print "Your SIP domain (e.g. myprovider.com): ",
    acc_domain = sys.stdin.readline()
    if acc_domain == "\n":
        return
    acc_domain = acc_domain.replace("\n", "")

    print "Your username (e.g. alice): ",
    acc_username = sys.stdin.readline()
    if acc_username == "\n":
        return
    acc_username = acc_username.replace("\n", "")

    print "Your password (e.g. secret): ",
    acc_passwd = sys.stdin.readline()
    if acc_passwd == "\n":
        return
    acc_passwd = acc_passwd.replace("\n", "")

    # Configure account configuration
    acc_cfg = py_pjsua.acc_config_default()
    acc_cfg.id = "sip:" + acc_username + "@" + acc_domain
    acc_cfg.reg_uri = "sip:" + acc_domain

    cred_info = py_pjsua.Pjsip_Cred_Info()
    cred_info.realm = "*"
    cred_info.scheme = "digest"
    cred_info.username = acc_username
    cred_info.data_type = 0
    cred_info.data = acc_passwd

    acc_cfg.cred_info.append(1)
    acc_cfg.cred_info[0] = cred_info

    # Add new SIP account
    status, acc_id = py_pjsua.acc_add(acc_cfg, 1)
    if status != 0:
        py_pjsua.perror(THIS_FILE, "Error adding SIP account", status)
    else:
        g_acc_id = acc_id
        write_log(3, "Account " + acc_cfg.id + " added")
示例#5
0
def disconnect_port():
	src_port = 0
	dst_port = 0
	
	print "Disconnect src port # (empty to cancel): "
	src_port = sys.stdin.readline()
	if src_port == "\n": 
		return
	src_port = src_port.replace("\n", "")
	src_port = int(src_port)
	print "From dst port # (empty to cancel): "
	dst_port = sys.stdin.readline()
	if dst_port == "\n": 
		return
	dst_port = dst_port.replace("\n", "")
	dst_port = int(dst_port)
	status = py_pjsua.conf_disconnect(src_port, dst_port)
	if status != 0:
		py_pjsua.perror(THIS_FILE, "Error disconnecting port ", status)
	else:		
		write_log(3, "Port disconnected " + `src_port` + " from " + `dst_port`)
示例#6
0
def add_recorder():
	global g_rec_file
	global g_rec_id
	global g_rec_port
	
	file_name = ""
	status = -1
	rec_id = 0
	
	print "Enter the path of the file recorder(e.g. /tmp/audio.wav): ",
	file_name = sys.stdin.readline()
	if file_name == "\n": 
		return
	file_name = file_name.replace("\n", "")
	status, rec_id = py_pjsua.recorder_create(file_name, 0, None, 0, 0)
	if status != 0:
		py_pjsua.perror(THIS_FILE, "Error adding file recorder ", status)
	else:
		g_rec_file = file_name
		g_rec_id = rec_id
		g_rec_port = py_pjsua.recorder_get_conf_port(rec_id)
		write_log(3, "File recorder " + file_name + " added")
示例#7
0
def add_player():
	global g_wav_files
	global g_wav_id
	global g_wav_port
	
	file_name = ""
	status = -1
	wav_id = 0
	
	print "Enter the path of the file player(e.g. /tmp/audio.wav): ",
	file_name = sys.stdin.readline()
	if file_name == "\n": 
		return
	file_name = file_name.replace("\n", "")
	status, wav_id = py_pjsua.player_create(file_name, 0)
	if status != 0:
		py_pjsua.perror(THIS_FILE, "Error adding file player ", status)
	else:
		g_wav_files.append(file_name)
		if g_wav_id == 0:
			g_wav_id = wav_id
			g_wav_port = py_pjsua.player_get_conf_port(wav_id)
		write_log(3, "File player " + file_name + " added")
示例#8
0
def app_menu():
	global g_acc_id
	global g_current_call

	quit = 0
	while quit == 0:
		print_menu()
		choice = sys.stdin.readline()

		if choice[0] == "q":
			quit = 1

		elif choice[0] == "i":
			# Sending IM	
			print "Send IM to SIP URL: ",
			url = sys.stdin.readline()
			if url == "\n":
				continue

			# Send typing indication
			py_pjsua.im_typing(g_acc_id, url, 1, None) 

			print "The content: ",
			message = sys.stdin.readline()
			if message == "\n":
				py_pjsua.im_typing(g_acc_id, url, 0, None) 		
				continue

			# Send the IM!
			py_pjsua.im_send(g_acc_id, url, None, message, None, 0)

		elif choice[0] == "m":
			# Make call 
			print "Using account ", g_acc_id
			print "Make call to SIP URL: ",
			url = sys.stdin.readline()
			url = url.replace("\n", "")
			if url == "":
				continue

			# Initiate the call!
			status, call_id = py_pjsua.call_make_call(g_acc_id, url, 0, 0, None)
            
			if status != 0:
				py_pjsua.perror(THIS_FILE, "Error making call", status)
			else:
				g_current_call = call_id

		elif choice[0] == "+" and choice[1] == "b":
			# Add new buddy
			bc = py_pjsua.Buddy_Config()
			print "Buddy URL: ",
			bc.uri = sys.stdin.readline()
			if bc.uri == "\n":
				continue
            
			bc.uri = bc.uri.replace("\n", "")
			bc.subscribe = 1
			status, buddy_id = py_pjsua.buddy_add(bc)
			if status != 0:
				py_pjsua.perror(THIS_FILE, "Error adding buddy", status)
		elif choice[0] == "-" and choice[1] == "b":
			print "Enter buddy ID to delete : "
			buf = sys.stdin.readline()
			buf = buf.replace("\n","")
			if buf == "":
				continue
			i = int(buf)
			if py_pjsua.buddy_is_valid(i) == 0:
				print "Invalid buddy id " + `i`
			else:
				py_pjsua.buddy_del(i)
				print "Buddy " + `i` + " deleted"		
		elif choice[0] == "+" and choice[1] == "a":
			# Add account
			add_account()
		elif choice[0] == "-" and choice[1] == "a":
			print "Enter account ID to delete : "
			buf = sys.stdin.readline()
			buf = buf.replace("\n","")
			if buf == "":
				continue
			i = int(buf)

			if py_pjsua.acc_is_valid(i) == 0:
				print "Invalid account id " + `i`
			else:
				py_pjsua.acc_del(i)
				print "Account " + `i` + " deleted"
	    
		elif choice[0] == "+" and choice[1] == "p":
			add_player()
		elif choice[0] == "+" and choice[1] == "r":
			add_recorder()
		elif choice[0] == "c" and choice[1] == "l":
			conf_list()
		elif choice[0] == "c" and choice[1] == "c":
			connect_port()
		elif choice[0] == "c" and choice[1] == "d":
			disconnect_port()
		elif choice[0] == "d" and choice[1] == "q":
			dump_call_quality()
		elif choice[0] == "x":
			xfer_call()
		elif choice[0] == "X":
			xfer_call_replaces()
		elif choice[0] == "h":
			if g_current_call != py_pjsua.PJSUA_INVALID_ID:
				py_pjsua.call_hangup(g_current_call, 603, None, None)
			else:
				print "No current call"
		elif choice[0] == "H":
			if g_current_call != py_pjsua.PJSUA_INVALID_ID:
				py_pjsua.call_set_hold(g_current_call, None)
		
			else:
				print "No current call"
		elif choice[0] == "v":
			if g_current_call != py_pjsua.PJSUA_INVALID_ID:
		
				py_pjsua.call_reinvite(g_current_call, 1, None);

			else:
				print "No current call"
		elif choice[0] == "#":
			if g_current_call == py_pjsua.PJSUA_INVALID_ID:		
				print "No current call"
			elif py_pjsua.call_has_media(g_current_call) == 0:
				print "Media is not established yet!"
			else:
				call = g_current_call
				print "DTMF strings to send (0-9*#A-B)"
				buf = sys.stdin.readline()
				buf = buf.replace("\n", "")
				if buf == "":
					continue
				if call != g_current_call:
					print "Call has been disconnected"
					continue
				status = py_pjsua.call_dial_dtmf(g_current_call, buf)
				if status != 0:
					py_pjsua.perror(THIS_FILE, "Unable to send DTMF", status);
				else:
					print "DTMF digits enqueued for transmission"
		elif choice[0] == "s":
			print "Subscribe presence of (buddy id) : "
			buf = sys.stdin.readline()
			buf = buf.replace("\n","")
			if buf == "":
				continue
			i = int(buf)
			py_pjsua.buddy_subscribe_pres(i, 1)
		elif choice[0] == "u":
			print "Unsubscribe presence of (buddy id) : "
			buf = sys.stdin.readline()
			buf = buf.replace("\n","")
			if buf == "":
				continue
			i = int(buf)
			py_pjsua.buddy_subscribe_pres(i, 0)
		elif choice[0] == "t":
			acc_info = py_pjsua.acc_get_info(g_acc_id)
			if acc_info.online_status == 0:
				acc_info.online_status = 1
			else:
				acc_info.online_status = 0
			py_pjsua.acc_set_online_status(g_acc_id, acc_info.online_status)
			st = ""
			if acc_info.online_status == 0:
				st = "offline"
			else:
				st = "online"
			print "Setting " + acc_info.acc_uri + " online status to " + st
		elif choice[0] == "r":
			if choice[1] == "r":	    
				py_pjsua.acc_set_registration(g_acc_id, 1)
			elif choice[1] == "u":
				py_pjsua.acc_set_registration(g_acc_id, 0)
		elif choice[0] == "d":
			py_pjsua.dump(choice[1] == "d")
		elif choice[0] == "a":
			if g_current_call != py_pjsua.PJSUA_INVALID_ID:				
				
				py_pjsua.call_answer(g_current_call, 200, None, None)
			else:
				print "No current call"
示例#9
0
def err_exit(title, rc):
    py_pjsua.perror(THIS_FILE, title, rc)
    exit(1)
示例#10
0
def err_exit(title, rc):
    py_pjsua.perror(THIS_FILE, title, rc)
    py_pjsua.destroy()
    exit(1)
示例#11
0
def err_exit(title, rc):
    py_pjsua.perror(THIS_FILE, title, rc)
    py_pjsua.destroy()
    exit(1)
示例#12
0
tc = py_pjsua.transport_config_default()

py_pjsua.normalize_stun_config(stunc)

status, id = py_pjsua.transport_create(1, tc)
print "py transport create status " + ` status `

ti = py_pjsua.Transport_Info()
ti = py_pjsua.transport_get_info(id)
print "py transport get info status " + ` status `

status = py_pjsua.transport_set_enable(id, 1)
print "py transport set enable status " + ` status `
if status != 0:
    py_pjsua.perror("py_pjsua", "set enable", status)

status = py_pjsua.transport_close(id, 1)
print "py transport close status " + ` status `
if status != 0:
    py_pjsua.perror("py_pjsua", "close", status)

# end of lib transport

# lib account

accfg = py_pjsua.acc_config_default()
status, accid = py_pjsua.acc_add(accfg, 1)
print "py acc add status " + ` status `
if status != 0:
    py_pjsua.perror("py_pjsua", "add acc", status)
示例#13
0

py_pjsua.normalize_stun_config(stunc);


status, id = py_pjsua.transport_create(1, tc);
print "py transport create status " + `status`

ti = py_pjsua.Transport_Info();
ti = py_pjsua.transport_get_info(id)
print "py transport get info status " + `status`

status = py_pjsua.transport_set_enable(id,1)
print "py transport set enable status " + `status`
if status != 0 :
	py_pjsua.perror("py_pjsua","set enable",status)


status = py_pjsua.transport_close(id,1)
print "py transport close status " + `status`
if status != 0 :
	py_pjsua.perror("py_pjsua","close",status)

# end of lib transport

# lib account 

accfg = py_pjsua.acc_config_default()
status, accid = py_pjsua.acc_add(accfg, 1)
print "py acc add status " + `status`
if status != 0 :