Clear telnet patch voor rdl achter sommige N-porten die reverse telnet gebruiken

This commit is contained in:
2020-07-27 10:52:04 +02:00
parent feec227de5
commit e24b1ebc1e
2 changed files with 34 additions and 14 deletions

View File

@@ -28,7 +28,7 @@ Support for:
def __init__(self, user=None, password=None,
host="sip-lmw.rws.nl", port=443, meetnet="LMW", ssl = True,
check_ssl = True, timeout = 10, log = None):
check_ssl = True, timeout = 10, log = None, cleartelnet = False):
"""LmwSip(user, password, [host], [port], [meetnet], [ssl], [check_ssl], [timeout], [log])
user(optinal): Lmw user name
@@ -40,6 +40,7 @@ ssl(optional): Default true
check_ssl(optional): true
timeout(optional): 10
log(optional): None
cleartelnet: False
Opens the connection and logs in
"""
@@ -52,6 +53,7 @@ Opens the connection and logs in
self.check_ssl = check_ssl
self.timeout = timeout
self._socket = None
self.cleartelnet = cleartelnet
if (log != None):
self.log = log
self.log.debug("LmwSip.init")
@@ -156,28 +158,32 @@ send a sip command to the server
recieve a answer from the sip server
"""
buf=""
stringbuf=""
while self._socket != None and re.search("\r$", buf) == None:
try:
self.log.debug("LmwSip.recv: Waiting for data");
b = self._socket.recv(4096).decode('utf-8')
if (b == ""):
self.log.error("SipLmw.recv: socket closed")
self.closesocket()
raise LmwSipConnectError("LmwSip.recv: Socket close")
else:
buf += b
bytebuf = self._socket.recv(4096)
if self.cleartelnet:
while bytebuf[0] == '\xff':
self.log.info("SipLmw.recv: telnet data: %s", bytebuf)
bytebuf = self._socket.recv(4096)
except Exception as e:
self.log.error("SipLmw.recv: socket timeout: %s", e)
self.closesocket()
raise LmwSipConnectError("LmwSip.recv: Socket timeout")
try:
stringbuf += bytebuf.decode('utf-8')
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 buf[0] != '!':
self.log.warn("LmwSip.recv: Sip error: %s" % buf.strip('\r'))
elif stringbuf[0] != '!':
self.log.warn("LmwSip.recv: Sip error: %s" % stringbuf.strip('\r'))
else:
self.log.debug("LmwSip.recv: result: %s" % buf.strip('\r'))
return(buf)
self.log.debug("LmwSip.recv: result: %s" % stringbuf.strip('\r'))
return(stringbuf)
def login(self):
"""login()
@@ -420,6 +426,17 @@ class LmwSipConnectError(Exception):
def __str__(self):
return(self.message)
class LmwSipDecodeError(Exception):
"""Connection exceptions for LmwSip"""
def __init__(self, message, buf):
self.message = message
self.buf = buf
def __str__(self):
return(self.message + ":" + buf)
class LmwLoginFailure(Exception):
"""Exception from LmwSip on login failure"""