# -*- coding: cp936 -*-
import pjsua as pj
import threading,time
import sys
def log_cb(level, str, len):
print str,
class TestAccountCallback(pj.AccountCallback):
iRegStatus = 0
def __init__(self, account=None):
pj.AccountCallback.__init__(self, account)
self.iRegStatus = 0
def on_reg_state(self):
self.iRegStatus = self.account.info().reg_status
class SipRegister(threading.Thread):
def __init__(self,lib,Domain,UserName,UserPsw):
threading.Thread.__init__(self)
self.lib = lib
self.Domain = Domain
self.UserName = UserName
self.UserPsw = UserPsw
self.Acc = None
self.Acc_cb = None
def run(self):
self.lib.thread_register("Test")
iTickCount = 0
iCode = 0
self.Register()
iCode = self.Acc_cb.iRegStatus
while iCode < 200 and iTickCount < 320:
time.sleep(0.1)
iCode = self.Acc_cb.iRegStatus
iTickCount += 1
if iCode == 200:
print "Register Ok"
else:
print "Register Fail"
def Register(self):
global mutex
try:
mutex.acquire()
self.Acc = self.lib.create_account(pj.AccountConfig(self.Domain,self.UserName,self.UserPsw))
self.Acc_cb = TestAccountCallback(self.Acc)
self.Acc.set_callback(self.Acc_cb)
mutex.release()
except pj.Error, e:
print "Exception: " + str(e)
return None
if __name__ == "__main__":
mutex = threading.Lock()
print "\n*****************************************************************"
print "* *"
print "* Created by Jason 2013.05 *"
print "* *"
print "*****************************************************************\n"
lib = pj.Lib()
lib.init(log_cfg = pj.LogConfig(level=0, callback=log_cb, console_level=0))
lib.start()
transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(5060))
for i in range(3):
SipRegister(lib,"192.168.28.108",str(3601+i),"123456").start()
time.sleep(1)
print "Press any key to exit!"
sys.stdin.readline().rstrip("\r\n")
transport = None
lib.destroy()
lib = None
print "\n***************************Exit**************************"
import pjsua as pj
import threading,time
import sys
def log_cb(level, str, len):
print str,
class TestAccountCallback(pj.AccountCallback):
iRegStatus = 0
def __init__(self, account=None):
pj.AccountCallback.__init__(self, account)
self.iRegStatus = 0
def on_reg_state(self):
self.iRegStatus = self.account.info().reg_status
class SipRegister(threading.Thread):
def __init__(self,lib,Domain,UserName,UserPsw):
threading.Thread.__init__(self)
self.lib = lib
self.Domain = Domain
self.UserName = UserName
self.UserPsw = UserPsw
self.Acc = None
self.Acc_cb = None
def run(self):
self.lib.thread_register("Test")
iTickCount = 0
iCode = 0
self.Register()
iCode = self.Acc_cb.iRegStatus
while iCode < 200 and iTickCount < 320:
time.sleep(0.1)
iCode = self.Acc_cb.iRegStatus
iTickCount += 1
if iCode == 200:
print "Register Ok"
else:
print "Register Fail"
def Register(self):
global mutex
try:
mutex.acquire()
self.Acc = self.lib.create_account(pj.AccountConfig(self.Domain,self.UserName,self.UserPsw))
self.Acc_cb = TestAccountCallback(self.Acc)
self.Acc.set_callback(self.Acc_cb)
mutex.release()
except pj.Error, e:
print "Exception: " + str(e)
return None
if __name__ == "__main__":
mutex = threading.Lock()
print "\n*****************************************************************"
print "* *"
print "* Created by Jason 2013.05 *"
print "* *"
print "*****************************************************************\n"
lib = pj.Lib()
lib.init(log_cfg = pj.LogConfig(level=0, callback=log_cb, console_level=0))
lib.start()
transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(5060))
for i in range(3):
SipRegister(lib,"192.168.28.108",str(3601+i),"123456").start()
time.sleep(1)
print "Press any key to exit!"
sys.stdin.readline().rstrip("\r\n")
transport = None
lib.destroy()
lib = None
print "\n***************************Exit**************************"
该博客展示了如何使用Python的pjsua库在多线程环境中进行SIP用户注册。通过创建线程并使用互斥锁来确保线程安全,实现了对多个账号的并发注册尝试。每个线程负责一个用户的注册过程,并通过回调函数获取注册状态。
434

被折叠的 条评论
为什么被折叠?



