|
@@ -76,10 +76,12 @@ class Account(pj.Account):
|
|
|
self.kwargs = kwargs
|
|
|
|
|
|
def onRegState(self, prm):
|
|
|
- print("***OnRegState: " + prm.reason)
|
|
|
+ ai = self.getInfo()
|
|
|
+ print("***OnRegState: " + prm.reason, ai.id,ai.isDefault,ai.uri,ai.regIsConfigured,ai.regIsActive,ai.regExpiresSec,ai.regStatus,ai.regStatusText,ai.regLastErr,ai.onlineStatus,ai.onlineStatusText)
|
|
|
|
|
|
def onIncomingCall(self, prm):
|
|
|
- print("***onIncomingCall: ", prm.callId, json.dumps(self.kwargs))
|
|
|
+ ai = self.getInfo()
|
|
|
+ print("***onIncomingCall: ", prm.callId, ai.id,ai.isDefault,ai.uri,ai.regIsConfigured,ai.regIsActive,ai.regExpiresSec,ai.regStatus,ai.regStatusText,ai.regLastErr,ai.onlineStatus,ai.onlineStatusText)
|
|
|
|
|
|
call = MyCall(self.agent, self, self.user_part, prm.callId, **self.kwargs)
|
|
|
call_op_param = pj.CallOpParam(True)
|
|
@@ -100,9 +102,10 @@ class MyCall(pj.Call):
|
|
|
self.aud_med = None
|
|
|
self.recorder = None
|
|
|
self.player = None # 用于播放录音的媒体播放器
|
|
|
- from src.core.voip.asr import TestSt
|
|
|
- self.asr = TestSt(call_id) # 创建ASR实例
|
|
|
- self.asr.start() # 启动ASR线程
|
|
|
+ self.asr = None
|
|
|
+ # from src.core.voip.asr import TestSt
|
|
|
+ # self.asr = TestSt(call_id) # 创建ASR实例
|
|
|
+ # self.asr.start() # 启动ASR线程
|
|
|
|
|
|
def onDtmfDigit(self, prm):
|
|
|
digit = prm.digit
|
|
@@ -128,7 +131,7 @@ class MyCall(pj.Call):
|
|
|
if call_info.state == pj.PJSIP_INV_STATE_DISCONNECTED:
|
|
|
print("通话结束")
|
|
|
# 远程挂机之后要将分机号回收
|
|
|
- self.agent.unregister(self.user_part)
|
|
|
+ self.agent.release(self.user_part)
|
|
|
|
|
|
def onCallMediaState(self, prm):
|
|
|
call_info = self.getInfo()
|
|
@@ -191,7 +194,7 @@ class MyCall(pj.Call):
|
|
|
|
|
|
class BotAgent:
|
|
|
|
|
|
- def __init__(self, logger, user_part_range=range(1000, 1010), host="192.168.124.6", port="5060", password="slibra@#123456"):
|
|
|
+ def __init__(self, logger, user_part_range=range(1001, 1011), host="192.168.124.6", port="5060", password="slibra@#123456"):
|
|
|
self.logger = logger
|
|
|
self.user_part_range, self.host, self.port, self.password = user_part_range, host, port, password
|
|
|
self.pool = queue.Queue(maxsize=len(user_part_range))
|
|
@@ -207,8 +210,8 @@ class BotAgent:
|
|
|
ep_cfg.uaConfig.threadCnt = 1
|
|
|
ep_cfg.uaConfig.mainThreadOnly = True
|
|
|
ep_cfg.uaConfig.maxCalls = 8
|
|
|
- ep_cfg.logConfig.level = 5
|
|
|
- ep_cfg.logConfig.consoleLevel = 5
|
|
|
+ ep_cfg.logConfig.level = 4
|
|
|
+ ep_cfg.logConfig.consoleLevel = 4
|
|
|
self.ep.libCreate()
|
|
|
self.ep.libInit(ep_cfg)
|
|
|
|
|
@@ -229,6 +232,10 @@ class BotAgent:
|
|
|
cred = pj.AuthCredInfo("digest", "*", f"{user_part}", 0, self.password)
|
|
|
acfg.sipConfig.authCreds.append(cred)
|
|
|
|
|
|
+ acfg.regConfig.timeoutSec = 3600 # 注册超时时间(秒)
|
|
|
+ acfg.regConfig.retryIntervalSec = 10 # 重试间隔时间(秒)
|
|
|
+ acfg.regConfig.firstRetryIntervalSec = 10 # 首次重试间隔时间(秒)
|
|
|
+
|
|
|
# Create the account
|
|
|
acc = Account(self, user_part)
|
|
|
acc.create(acfg)
|
|
@@ -254,9 +261,14 @@ class BotAgent:
|
|
|
|
|
|
def register(self, **kwargs):
|
|
|
user_part = self.pool.get()
|
|
|
- self.logger.info('register, user_part :%d, args: %s', user_part, json.dumps(kwargs))
|
|
|
+ self.logger.info('register, user_part :%d, pool.size :%d', user_part, self.pool.qsize())
|
|
|
acc = self.accounts.get(user_part)
|
|
|
if acc:
|
|
|
+ # ps = pj.PresenceStatus()
|
|
|
+ # ps.status = pj.PJSUA_BUDDY_STATUS_ONLINE
|
|
|
+ # ps.activity = pj.PJRPID_ACTIVITY_AWAY
|
|
|
+ # ps.note = "Away"
|
|
|
+ # acc.setOnlineStatus(ps)
|
|
|
# acc.setRegistration(renew=True)
|
|
|
acc.kwargs = kwargs
|
|
|
return user_part
|
|
@@ -279,6 +291,7 @@ class BotAgent:
|
|
|
if element_in_queue(self.pool, user_part):
|
|
|
return
|
|
|
self.pool.put(user_part)
|
|
|
+ self.logger.info("release, user_part :%d, pool.size :%d", user_part, self.pool.qsize())
|
|
|
|
|
|
def destroy(self):
|
|
|
self.is_stopping = True
|
|
@@ -287,3 +300,9 @@ class BotAgent:
|
|
|
|
|
|
def __del__(self):
|
|
|
self.destroy()
|
|
|
+
|
|
|
+
|
|
|
+# if __name__ == '__main__':
|
|
|
+# import logging
|
|
|
+# logger = logging.getLogger('voip')
|
|
|
+# bot = BotAgent(logger)
|