|
@@ -373,63 +373,66 @@ class InboundClient:
|
|
|
self.is_stopping = True
|
|
|
|
|
|
|
|
|
+class ESLRequestHandler(socketserver.BaseRequestHandler):
|
|
|
+ def setup(self):
|
|
|
+ try:
|
|
|
+ self.logger.info('%s connected!', self.client_address)
|
|
|
+ fd = self.request.fileno()
|
|
|
+ con = ESL.ESLconnection(fd)
|
|
|
+ self.logger.info('Connected: %s', con.connected())
|
|
|
+ if con.connected():
|
|
|
+ info = con.getInfo()
|
|
|
+
|
|
|
+ # print(json.loads(info.serialize('json')))
|
|
|
+ event_name = info.getHeader("Event-Name")
|
|
|
+ device_id = info.getHeader("unique-id")
|
|
|
+ kwargs = json.loads(info.serialize('json'))
|
|
|
+ destination = self.agent.register(**kwargs)
|
|
|
+ self.logger.info("device_id=%s, destination=%s", device_id, destination)
|
|
|
+
|
|
|
+ Cache.add_device_user_part(device_id, destination)
|
|
|
+ con.execute("bridge", f"user/{destination}", device_id)
|
|
|
+
|
|
|
+ # destination = "user/1001"
|
|
|
+ # msg = ESL.ESLevent("sendmsg", uuid)
|
|
|
+ # msg.addHeader("call-command", "execute")
|
|
|
+ # msg.addHeader("execute-app-name", "bridge")
|
|
|
+ # msg.addHeader("execute-app-arg", destination)
|
|
|
+ # # 发送消息以执行 bridge 操作
|
|
|
+ # con.sendEvent(msg)
|
|
|
+ # print(f"Call {uuid} is bridged to {destination}")
|
|
|
+
|
|
|
+ # con.execute("answer", "", uuid)
|
|
|
+
|
|
|
+ # con.execute("transfer", "1001 XML default", uuid)
|
|
|
+ # try:
|
|
|
+ # con.disconnect()
|
|
|
+ # except:
|
|
|
+ # print('come in ')
|
|
|
+ # traceback.print_exc()
|
|
|
+ else:
|
|
|
+ self.logger.info("Failed to connect to FreeSWITCH")
|
|
|
+ except:
|
|
|
+ traceback.print_exc()
|
|
|
+
|
|
|
+
|
|
|
+class CustomTCPServer(socketserver.TCPServer):
|
|
|
+ def __init__(self, server_address, RequestHandlerClass, agent, logger):
|
|
|
+ self.agent = agent
|
|
|
+ self.logger = logger
|
|
|
+ super().__init__(server_address, RequestHandlerClass)
|
|
|
+
|
|
|
+
|
|
|
class OutboundClient:
|
|
|
|
|
|
def __init__(self, agent, logger):
|
|
|
self.bot_agent = agent
|
|
|
self.logger = logger
|
|
|
- threading.Thread(target=self.start, args=()).start()
|
|
|
-
|
|
|
- class ESLRequestHandler(socketserver.BaseRequestHandler):
|
|
|
- def setup(self):
|
|
|
- try:
|
|
|
- self.client.logger.info('%s connected!', self.client_address)
|
|
|
- fd = self.request.fileno()
|
|
|
- con = ESL.ESLconnection(fd)
|
|
|
- self.client.logger.info('Connected: %s', con.connected())
|
|
|
- if con.connected():
|
|
|
- info = con.getInfo()
|
|
|
-
|
|
|
- # print(json.loads(info.serialize('json')))
|
|
|
- event_name = info.getHeader("Event-Name")
|
|
|
- device_id = info.getHeader("unique-id")
|
|
|
- kwargs = json.loads(info.serialize('json'))
|
|
|
- destination = self.client.bot_agent.register(**kwargs)
|
|
|
- self.client.logger.info("device_id=%s, destination=%s", device_id, destination)
|
|
|
-
|
|
|
- Cache.add_device_user_part(device_id, destination)
|
|
|
- con.execute("bridge", f"user/{destination}", device_id)
|
|
|
-
|
|
|
- # destination = "user/1001"
|
|
|
- # msg = ESL.ESLevent("sendmsg", uuid)
|
|
|
- # msg.addHeader("call-command", "execute")
|
|
|
- # msg.addHeader("execute-app-name", "bridge")
|
|
|
- # msg.addHeader("execute-app-arg", destination)
|
|
|
- # # 发送消息以执行 bridge 操作
|
|
|
- # con.sendEvent(msg)
|
|
|
- # print(f"Call {uuid} is bridged to {destination}")
|
|
|
-
|
|
|
- # con.execute("answer", "", uuid)
|
|
|
-
|
|
|
- # con.execute("transfer", "1001 XML default", uuid)
|
|
|
- # try:
|
|
|
- # con.disconnect()
|
|
|
- # except:
|
|
|
- # print('come in ')
|
|
|
- # traceback.print_exc()
|
|
|
- else:
|
|
|
- self.client.logger.info("Failed to connect to FreeSWITCH")
|
|
|
- except:
|
|
|
- traceback.print_exc()
|
|
|
-
|
|
|
- class CustomTCPServer(socketserver.TCPServer):
|
|
|
- def __init__(self, server_address, RequestHandlerClass, client):
|
|
|
- self.client = client
|
|
|
- socketserver.TCPServer.__init__(server_address, RequestHandlerClass)
|
|
|
+ threading.Thread(target=self.start, args=('0.0.0.0', 8084, agent, logger)).start()
|
|
|
|
|
|
- def start(self, HOST='0.0.0.0', PORT=8084):
|
|
|
+ def start(self, HOST='0.0.0.0', PORT=8084, agent=None, logger=None):
|
|
|
# HOST, PORT = "0.0.0.0", 8084
|
|
|
# 创建一个 TCP 服务器
|
|
|
- with self.CustomTCPServer(server_address=(HOST, PORT), RequestHandlerClass=self.ESLRequestHandler, client=self) as server:
|
|
|
+ with CustomTCPServer((HOST, PORT), ESLRequestHandler, agent, logger) as server:
|
|
|
self.logger.info(f"ESL server listening on {HOST}:{PORT}")
|
|
|
server.serve_forever()
|