From 5968b6ff5b15a570add767f90df48000584e8541 Mon Sep 17 00:00:00 2001 From: Marcel Nijenhof Date: Sat, 7 Nov 2020 13:47:54 +0100 Subject: [PATCH] Exception response in recv na close --- lmwsip/__init__.py | 19 +++++++++++++------ lmwsip/tests/__init__.py | 6 ++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lmwsip/__init__.py b/lmwsip/__init__.py index 54725df..56e636d 100644 --- a/lmwsip/__init__.py +++ b/lmwsip/__init__.py @@ -194,16 +194,19 @@ send a sip command to the server recieve a answer from the sip server """ + c = 0 bytebuf=b'' stringbuf="" - while (self._socket != None) and (stringbuf.find("\r") == -1): + while (self._socket != None) and (stringbuf.find("\r") == -1) and (c < 3): try: self.log.debug("LmwSip.recv: %s: Waiting for data" % self.cleartelnet); bytebuf = self._socket.recv(4096) - self.log.debug("recv: bytebuf: %s" % bytebuf) - if self.cleartelnet: - if bytebuf[0] == 255: - bytebuf = b'' + if (len(bytebuf) == 0): + c+=1 + self.log.debug("recv: bytebuf: %s" % bytebuf) + if self.cleartelnet: + if bytebuf[0] == 255: + bytebuf = b'' except Exception as e: self.log.error("SipLmw.recv: socket timeout: %s", e) self.closesocket() @@ -215,7 +218,11 @@ recieve a answer from the sip server self.log.error("SipLmw.recv: decode error: %s", e) self.closesocket() raise LmwSipDecodeError("LmwSip.recv: decode error", bytebuf) - if self._socket == None: + if (c>=3) and (len(stringbuf) == 0): + self.log.warning("LmwSip.recv: No data recieved") + self.closesocket() + raise LmwSipConnectError("LmwSip.recv: socket close") + elif self._socket == None: self.log.warning("LmwSip.recv: No connection") elif len(stringbuf) == 0: self.log.warning("LmwSip.recv: No data") diff --git a/lmwsip/tests/__init__.py b/lmwsip/tests/__init__.py index 8ed227c..15f4eda 100755 --- a/lmwsip/tests/__init__.py +++ b/lmwsip/tests/__init__.py @@ -75,6 +75,12 @@ class lmwsipTest(unittest.TestCase): self.assertEqual(self.sip._roundtime_(t1, "D10"), t1) self.assertEqual(self.sip._roundtime_(t2, "D10"), t1) + def test_closerecv(self): + self.login() + self.sip.send("CLOSE") + with self.assertRaises(lmwsip.LmwSipConnectError): + self.sip.recv() + def test_run(self): capturedOutput = io.StringIO() sys.stdout = capturedOutput