From a2853d2bd7cee0e3f248bb44835a86c26602e2dc Mon Sep 17 00:00:00 2001 From: nijenhofm Date: Wed, 26 Aug 2020 09:14:11 +0200 Subject: [PATCH] Verbetering telnet header afhandeling - Versturen response code - Extra debug logging --- lmwsip.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/lmwsip.py b/lmwsip.py index ac79ad1..c0e5fa5 100644 --- a/lmwsip.py +++ b/lmwsip.py @@ -60,7 +60,8 @@ Opens the connection and logs in. self._socket = None if (log != None): self.log = log - self.log.debug("LmwSip.init") + self.log.debug("LmwSip.init(%s, **********, %s, %s, %s, %s, %s, %s, %s, %s)" % + (user, host, port, meetnet, ssl, check_ssl, timeout, cleartelnet, reconnecttime)) else: try: self.log = logging.getLogger("lmwsip") @@ -174,12 +175,22 @@ send a sip command to the server self.log.debug("LmwSip.send(%s)" % logcmd) self._socket.sendall(sipcmd.encode('ascii')) except Exception as e: - self.log.error("LmwSip.send(%s) failed: %s", sipcmd, e) + self.log.error("LmwSip.send(%s) failed: %s" % (sipcmd, e)) self.closesocket() raise LmwSipConnectError("LmwSip.send: Socket connection lost") else: self.log.warn("LmwSip.send: No connection") + def telnetheader(self, header): + a = b'\xff\xfd\x01\xff\xfd\x03\xff\xfd\x00\xff\xfc\x01\xff\xfb\x00' + self.log.debug("LmwSip.telnetheader(%s) --> %s" % (header, a)) + try: + self._socket.sendall(a) + except Exception as e: + self.log.error("LmwSip.telnetheader(%s) --> %s failed: %s" % (header, a, e)) + self.closesocket() + raise LmwSipConnectError("LmwSip.telnetheader: Socket connection lost") + def recv(self): """recv() @@ -187,30 +198,29 @@ recieve a answer from the sip server """ bytebuf=b'' stringbuf="" - while self._socket != None and re.search("\r$", bytebuf.decode('utf-8')) == None: + while (self._socket != None) and (stringbuf.find("\r") == -1): try: - self.log.debug("LmwSip.recv: Waiting for data"); + 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: - while bytebuf[0] == '\xff': - self.log.info("SipLmw.recv: telnet data: %s", bytebuf) - bytebuf = self._socket.recv(4096) + if bytebuf[0] == 255: + bytebuf = b'' except Exception as e: self.log.error("SipLmw.recv: socket timeout: %s", e) self.closesocket() raise LmwSipConnectError("LmwSip.recv: No data recieved") - if len(bytebuf) == 0: - self.log.error("SipLmw.recv: no data recieved") - self.closesocket() - raise LmwSipConnectError("LmwSip.recv: Socket timeout") try: stringbuf += bytebuf.decode('utf-8') + self.log.debug("recv: stringbuf: %s" % stringbuf) except Exception as e: self.log.error("SipLmw.recv: decode error: %s", e) self.closesocket() raise LmwSipDecodeError("LmwSip.recv: decode error", bytebuf) if self._socket == None: self.log.warn("LmwSip.recv: No connection") + elif len(stringbuf) == 0: + self.log.warn("LmwSip.recv: No data") elif stringbuf[0] != '!': self.log.warn("LmwSip.recv: Sip error: %s" % stringbuf.strip('\r')) else: