From cda3dca8fc1cbdc4007bc7cf89bb31dfdbf73e1c Mon Sep 17 00:00:00 2001 From: merspieler <merspieler@users.noreply.github.com> Date: Thu, 1 Mar 2018 17:30:16 +0100 Subject: [PATCH] Completed fg search Signed-off-by: merspieler <merspieler@users.noreply.github.com> --- __init__.py | 70 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/__init__.py b/__init__.py index 0a09642..9f9b475 100644 --- a/__init__.py +++ b/__init__.py @@ -875,7 +875,7 @@ class FlightGearCopilotSkill(MycroftSkill): port = normalize(message.data['utterance']) port = re.sub('\D', '', port) - if int(port) > 0 or int(port) < 65535: + if int(port) >= 0 or int(port) <= 65536: self.speak("Port '" + port + "' out of range") sys.exit(0) @@ -906,7 +906,6 @@ class FlightGearCopilotSkill(MycroftSkill): @intent_handler(IntentBuilder('FindFlightGearIntent').require('conf.find.fg')) def handle_find_flight_gear_intent(self, message): - self.settings['port'] = 80 self.speak("Ok, I'm looking for a running flightgear on port " + str(self.settings['port']) + ". This can take a while.") # check localhost first @@ -930,35 +929,39 @@ class FlightGearCopilotSkill(MycroftSkill): except socket.error: pass - # TODO get network - # TODO scan network - try: - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - result = sock.connect_ex((ip, self.settings['port'])) - if result == 0: - # if a connection is found, ask user if it's the correct one - try: - (host, dummy, dummy) = socket.gethostbyaddr(ip) - host = socket.getfqdn(host) - except socket.gaierror: - pass - self.speak("Found an instance on " + host + ", do you want to use this computer?") - response = self.get_response("dummy") - if response != None: - match = re.search("yes|afirm|ok", response, re.I) - if match != None: - self.settings['host'] = host - self.speak("New host is set") - sys.exit() + # get network + net = self.get_ip() + net = re.sub("\d[1-3]$", '', net) - self.speak("Ok, I continue to search") - sock.close() + # scan network + for host_part in range(1, 255): + ip = net + str(host_part) + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + result = sock.connect_ex((ip, self.settings['port'])) + if result == 0: + # if a connection is found, ask user if it's the correct one + try: + (host, dummy, dummy) = socket.gethostbyaddr(ip) + host = socket.getfqdn(host) + except socket.gaierror: + pass + self.speak("Found an instance on " + host + ", do you want to use this computer?") + response = self.get_response("dummy") + if response != None: + match = re.search("yes|afirm|ok", response, re.I) + if match != None: + self.settings['host'] = host + self.speak("New host is set") + sys.exit() - except socket.error: - pass + self.speak("Ok, I continue to search") + sock.close() + + except socket.error: + pass self.speak("I haven't found any running flightgear on port " + str(self.settings['port'])) - self.settings['port'] = 8081 ################################################################# # # @@ -1006,6 +1009,19 @@ class FlightGearCopilotSkill(MycroftSkill): tn.write("cd /\r\n") return ret + # get ip address + def get_ip(self): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + # doesn't even have to be reachable + s.connect(('10.255.255.255', 1)) + IP = s.getsockname()[0] + except: + IP = '127.0.0.1' + finally: + s.close() + return IP + # exit routine to properly close the tn con def exit(self, tn): tn.close