diff --git a/lmwsip.py b/lmwsip.py index 519b497..ac79ad1 100644 --- a/lmwsip.py +++ b/lmwsip.py @@ -28,7 +28,8 @@ 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, cleartelnet = False): + check_ssl = True, timeout = 10, log = None, cleartelnet = False, + reconnecttime=540): """LmwSip(user, password, [host], [port], [meetnet], [ssl], [check_ssl], [timeout], [log]) user(optinal): Lmw user name @@ -37,23 +38,26 @@ host(optional): Default sip-lmw.rws.nl port(optional): Default 443 meetnet(optional): Default LMW ssl(optional): Default true -check_ssl(optional): true -timeout(optional): 10 -log(optional): None -cleartelnet: False +check_ssl(optional): Default true +timeout(optional): Default 10 +log(optional): Default None +cleartelnet(optional): Default False +reconnecttime(optional): Default 540 -Opens the connection and logs in +Opens the connection and logs in. """ - self.user = user - self.password = password - self.host = host - self.port = port - self.meetnet = meetnet - self.ssl = ssl - self.check_ssl = check_ssl - self.timeout = timeout - self._socket = None - self.cleartelnet = cleartelnet + self.user = user + self.password = password + self.host = host + self.port = port + self.meetnet = meetnet + self.ssl = ssl + self.check_ssl = check_ssl + self.timeout = timeout + self.cleartelnet = cleartelnet + self.reconnecttime = reconnecttime + self._connecttime = time.time() + self._socket = None if (log != None): self.log = log self.log.debug("LmwSip.init") @@ -67,6 +71,8 @@ Opens the connection and logs in self.connect() if (self.user != None): self.login() + else: + self.reconnecttime = 0 def lasttime(self, parameter): # @@ -106,6 +112,7 @@ connects to lmw with tcp using the values of the object creation. """ try: self._tcp = socket.create_connection((self.host, self.port)) + self._connecttime = time.time() except Exception as e: self.log.error("LmwSip.connect(%s, %s) failed: %s", self.host, self.port, e) @@ -134,11 +141,31 @@ connects to lmw with tcp using the values of the object creation. pass self._socket = None + def reconnectcheck(self): + """Checks if the connection is longer open than the reconnect time. +After this time a logout is sent and a new connection is created. + +This prevents the 10 minute server timeout""" + if self.reconnecttime > 0: + ct = time.time() - self._connecttime + if ct > self.reconnecttime: + self.log.debug("LmwSip.reconnectcheck: reconnect after %i seconds" % ct) + # + # Disable check for the reconnect + # + self.reconnecttime = - self.reconnecttime + self.logout() + time.sleep(1) + self.connect() + self.login() + self.reconnecttime = - self.reconnecttime + def send(self, sipcmd): """send(sipcmd) send a sip command to the server """ + self.reconnectcheck() if self._socket != None: try: logcmd = sipcmd.strip('\r')