diff --git a/server.py b/server.py index 13e810f..2a534e3 100644 --- a/server.py +++ b/server.py @@ -23,6 +23,10 @@ def get_request(self): pass return result + def server_bind(self): + HTTPServer.server_bind(self) + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + class Handler(BaseHTTPRequestHandler): def _set_headers(self): @@ -48,7 +52,8 @@ def do_GET(self): if RestrictAccess and self.client_address[0] not in RestrictAccess: return self.access_denied() return self.messageHandler() - except NameError: + except NameError as e: + print ("Error: %s" % e) self.password_required() except NameError: #- No security specified self.messageHandler() @@ -66,7 +71,6 @@ def do_POST(self): else: print ("TRY %s != %s" % (GlobalPassword, password)) except NameError: - print ("NameError") return self.password_required() print ("LSE %s != %s" % (GlobalPassword, parameters['password'])) self.password_required() @@ -331,33 +335,34 @@ def start(server_class=Server, handler_class=Handler, port=8080, listen='0.0.0.0 server_address = (listen, port) httpd = server_class(server_address, handler_class) httpd.timeout = timeout - print ('Starting broadlink-rest server on %s:%s ...' % (listen,port)) - httpd.serve_forever() - - -if __name__ == "__main__": - - settingsFile = configparser.ConfigParser() - settingsFile.optionxform = str - settingsFile.read(settings.settingsINI) + print ('\nStarting broadlink-rest server on %s:%s ...' % (listen,port)) + while not InterruptRequested: + httpd.handle_request() +def readSettingsFile(): global devices global DeviceByName - global GlobalTimeout - global RestrictedAccess + global RestrictAccess global LearnFrom global OverwriteProtected global GlobalPassword + global GlobalTimeout + global settingsFile # A few defaults - GlobalTimeout = 2 - DiscoverTimeout = 5 serverPort = 8080 Autodetect = False OverwriteProtected = True listen_address = '0.0.0.0' broadcast_address = '255.255.255.255' + + settingsFile = configparser.ConfigParser() + settingsFile.optionxform = str + settingsFile.read(settings.settingsINI) + Dev = settings.Dev + GlobalTimeout = settings.GlobalTimeout + DiscoverTimeout = settings.DiscoverTimeout # Override them if settingsFile.has_option('General', 'password'): @@ -449,5 +454,29 @@ def start(server_class=Server, handler_class=Handler, port=8080, listen='0.0.0.0 devices.append(device) print ("%s: Found %s on %s (%s)" % (devname, device.type, str(device.host[0]), device.mac)) DeviceByName[devname] = device + return { "port": serverPort, "listen": listen_address, "timeout": GlobalTimeout } + +def SigUsr1(signum, frame): + print ("\nReloading configuration ...") + global InterruptRequested + InterruptRequested = True - start(port=serverPort,listen=listen_address,timeout=GlobalTimeout) +def SigInt(signum, frame): + print ("\nShuting down server ...") + global ShutdownRequested + global InterruptRequested + ShutdownRequested = True + InterruptRequested = True + +if __name__ == "__main__": + global ShutdownRequested + global InteruptRequested + ShutdownRequested = False + signal.signal(signal.SIGUSR1,SigUsr1) + signal.signal(signal.SIGINT,SigInt) + while not ShutdownRequested: + serverParams = readSettingsFile() + InterruptRequested = False + start(**serverParams) + if not ShutdownRequested: + reload(settings) diff --git a/settings.ini b/settings.ini index 9ca2908..a2c2592 100644 --- a/settings.ini +++ b/settings.ini @@ -1,12 +1,12 @@ [General] -Timeout = 2 +Timeout = 4 serverPort = 8080 serverAddress = 192.168.12.200 Autodetect = 6 [Commands] -[LivingRoom-BlackBean] +[LivingRoom] IPAddress = 192.168.12.171 MACAddress = b4:43:0d:f9:16:11 Device = 0x2737 diff --git a/settings.py b/settings.py index 076aa1a..0d29db6 100644 --- a/settings.py +++ b/settings.py @@ -9,10 +9,9 @@ settings = configparser.ConfigParser() settings.read(settingsINI) +DiscoverTimeout = GlobalTimeout = 5 if settings.has_option('General', 'Timeout'): - DiscoverTimeout = Timeout = settings.get('General', 'Timeout') -else: - DiscoverTimeout = Timeout = 5 + DiscoverTimeout = GlobalTimeout = int(settings.get('General', 'Timeout').strip()) DevList = [] Dev = defaultdict(dict)