Esempio n. 1
0
 def process_message(self, msg: bytes):
     msg = protocol.parse_yate_message(msg)
     # we simulate minimal yate behavior and just ack all requests
     if isinstance(msg, protocol.InstallRequest):
         confirm = protocol.InstallConfirm(msg.priority, msg.name, True)
         handler = YateSimMessageHandler(msg.name, msg.priority,
                                         msg.filter_name, msg.filter_value)
         self.installed_message_handlers[msg.name] = handler
         self.enqueue_yate_message_raw(confirm.encode())
     elif isinstance(msg, protocol.UninstallRequest):
         success = msg.name in self.installed_message_handlers
         priority = self.installed_message_handlers[
             msg.name].priority if success else 0
         confirm = protocol.UninstallConfirm(priority, msg.name, success)
         self.enqueue_yate_message_raw(confirm.encode())
     elif isinstance(msg, protocol.WatchRequest):
         confirm = protocol.WatchConfirm(msg.name, True)
         self.enqueue_yate_message_raw(confirm.encode())
     elif isinstance(msg, protocol.UnwatchRequest):
         confirm = protocol.UnwatchConfirm(msg.name, True)
         self.enqueue_yate_message_raw(confirm.encode())
     elif isinstance(msg, protocol.Message):
         if not msg.reply:
             self.received_message_requests.append(msg)
             if msg.name in self._message_handlers:
                 self._message_handlers[msg.name](msg)
             self.enqueue_yate_message_raw(msg.encode_answer_for_yate(True))
Esempio n. 2
0
 def test_parse_yate_msg_without_kv(self):
     result = protocol.parse_yate_message('%%>message:0x7ff823883bb0.1932044751:1522601502:call.execute:'.encode("utf-8"))
     self.assertEqual("message", result.msg_type)
     self.assertEqual('0x7ff823883bb0.1932044751', result.id)
     self.assertEqual(1522601502, result.time)
     self.assertEqual('call.execute', result.name)
     self.assertEqual({}, result.params)
     self.assertEqual(False, result.reply)
Esempio n. 3
0
 def _recv_message_raw(self, raw_data):
     try:
         message = parse_yate_message(raw_data)
     except Exception as e:
         logging.error("Incoming yate message did not parse: {}".format(str(e)))
         return  # for now ignore messages with parsing errors
     if hasattr(self, "_handle_yate_{}".format(message.msg_type)):
         getattr(self, "_handle_yate_{}".format(message.msg_type))(message)
Esempio n. 4
0
 def test_parse_yate_msg(self):
     result = protocol.parse_yate_message('%%>message:0x7ff823883bb0.1932044751:1522601502:call.execute::id=sip/151:module=sip:status=incoming:address=172.20.23.1%z5060:billid=1522598913-105:answered=false:direction=incoming:callid=sip/4265e70a902406405ac10e1e275@DSIP/f-9024064014ea27935f/:caller=9940 DebügDÄCT:called=2049:callername=DebügDÄCT:antiloop=19:ip_host=172.20.23.1:ip_port=5060:ip_transport=UDP:connection_id=dect:connection_reliable=false:sip_uri=sip%[email protected]:sip_from=sip%[email protected]:sip_to=<sip%[email protected]>:sip_callid=4265e70a902406405ac10e1e275@DSIP:device=Mitel SIP-DECT (SW-Version=7.1-CK14):sip_contact="DebügDÄCT" <sip%[email protected]>;+sip.instance="<urn%zuuid%z1F102AF1-2C00-0100-8000-03029649cf19>":sip_supported=replaces, 100rel, path, gruu:sip_user-agent=Mitel SIP-DECT (SW-Version=7.1-CK14):sip_allow=INVITE, ACK, OPTIONS, CANCEL, BYE, REFER, NOTIFY, INFO, MESSAGE, UPDATE, PRACK:sip_content-type=application/sdp:username=9940:realm=voip.eventphone.de:newcall=true:domain=172.20.23.2:xsip_nonce_age=0:rtp_addr=172.20.23.12:media=yes:formats=alaw,mulaw:transport=RTP/AVP:rtp_rfc2833=101:rtp_port=16326:sdp_silenceSupp=off - - - -:sdp_sendrecv=:sdp_fmtp%z=0-15:rtp_forward=yes:handlers=javascript%z15,regexroute%z40,regexroute%z100,javascript%z15,cdrbuild%z50,regexroute%z80,regexroute%z100,sip%z100,register%z120:context=default:oconnection_id=dect:osip_X-EventphoneID=f45a42b9-35cc-11e8-b1ae-000c2991f54c:osip_X-CallType=default:callto=sip/sip%[email protected]'.encode("utf-8"))
     self.assertEqual("message", result.msg_type)
     self.assertEqual('0x7ff823883bb0.1932044751', result.id)
     self.assertEqual(1522601502, result.time)
     self.assertEqual('call.execute', result.name)
     self.assertEqual('DebügDÄCT', result.params['callername'])
     self.assertEqual(False, result.reply)
Esempio n. 5
0
 def test_async_yate_program(self):
     this_dir = os.path.dirname(__file__)
     test_script = os.path.join(this_dir, "asyncio_min.py")
     p = subprocess.Popen(["python", test_script], stdin=PIPE, stdout=PIPE, stderr=PIPE)
     install_message = p.stdout.readline().strip()
     self.assertEqual(b"%%>install:100:chan.notify", install_message)
     p.stdin.write(b"%%<install:100:chan.notify:true\n")
     p.stdin.flush()
     ready_note = p.stderr.readline().strip()
     self.assertEqual(b"Notify handler installed!", ready_note)
     print("Sending message...")
     p.stdin.write(b"%%>message:ID-42:4711:chan.notify:ret:channel=dump/3\n")
     p.stdin.flush()
     # wait for response
     response = p.stdout.readline().strip()
     msg = parse_yate_message(response)
     self.assertEqual("chan.notify", msg.name)
     self.assertEqual("ret", msg.return_value)
     self.assertEqual("ID-42", msg.id)
     self.assertEqual(msg.params, {"channel": "dump/3", "test": "yes"})
     p.wait(10)
     p.stdin.close()
     p.stdout.close()
     p.stderr.close()
Esempio n. 6
0
 def test_parse_install_request_no_filter(self):
     result = protocol.parse_yate_message(b"%%>install:70:chan.test")
     self.assertEqual(result.priority, 70)
     self.assertEqual(result.name, "chan.test")
Esempio n. 7
0
 def test_parse_setlocal_message(self):
     result = protocol.parse_yate_message(b"%%>setlocal:id:mychan0")
     self.assertEqual("setlocal", result.msg_type)
     self.assertEqual("id", result.param)
     self.assertEqual("mychan0", result.value)
Esempio n. 8
0
 def test_parse_setlocal_param_request_message(self):
     result = protocol.parse_yate_message(b"%%>setlocal:engine.version:")
     self.assertEqual("setlocal", result.msg_type)
     self.assertEqual("engine.version", result.param)
     self.assertEqual("", result.value)
Esempio n. 9
0
 def test_parse_unwatch_request(self):
     result = protocol.parse_yate_message(b"%%>unwatch:test")
     self.assertEqual(result.name, "test")
Esempio n. 10
0
 def test_parse_unwatch_message(self):
     result = protocol.parse_yate_message(b"%%<unwatch:call.execute:true")
     self.assertEqual("unwatch", result.msg_type)
     self.assertEqual("call.execute", result.name)
     self.assertEqual(True, result.success)
Esempio n. 11
0
 def test_parse_uninstall_message(self):
     result = protocol.parse_yate_message(b"%%<uninstall:50:test:true")
     self.assertEqual("uninstall", result.msg_type)
     self.assertEqual(50, result.priority)
     self.assertEqual("test", result.name)
     self.assertEqual(True, result.success)
Esempio n. 12
0
 def test_parse_watch_message(self):
     result = protocol.parse_yate_message(b"%%<watch:call.execute:false")
     self.assertEqual("watch", result.msg_type)
     self.assertEqual("call.execute", result.name)
     self.assertEqual(False, result.success)
Esempio n. 13
0
 def test_parse_install_request(self):
     result = protocol.parse_yate_message(b"%%>install:70:chan.test:important:true")
     self.assertEqual(result.priority, 70)
     self.assertEqual(result.name, "chan.test")
     self.assertEqual(result.filter_name, "important")
     self.assertEqual(result.filter_value, "true")
Esempio n. 14
0
 def answer_message(msg_bytes):
     msg = parse_yate_message(msg_bytes)
     if isinstance(msg, Message):
         msg.return_value = "gotIt"
         answer = msg.encode_answer_for_yate(True)
         y.event_loop.call_soon(y._recv_message_raw, answer)
Esempio n. 15
0
 def test_parse_setlocal_positive_answer(self):
     result = protocol.parse_yate_message(b"%%<setlocal:id:mychan0:true")
     self.assertEqual("setlocal", result.msg_type)
     self.assertEqual("id", result.param)
     self.assertEqual("mychan0", result.value)
     self.assertTrue(result.success)
Esempio n. 16
0
 def test_parse_setlocal_negative_answer(self):
     result = protocol.parse_yate_message(b"%%<setlocal:id:oldchan:false")
     self.assertEqual("setlocal", result.msg_type)
     self.assertEqual("id", result.param)
     self.assertEqual("oldchan", result.value)
     self.assertFalse(result.success)
Esempio n. 17
0
 def test_encode_yate_message_changed(self):
     result = protocol.parse_yate_message(b"%%>message:id123:4711:call.execute:old_return:test=yes")
     result.params["test"] = "false"
     result.return_value = "new_return"
     encodedMsg = result.encode_answer_for_yate(True)
     self.assertEqual(b"%%<message:id123:true:call.execute:new_return:test=false", encodedMsg)