diff --git a/rtxHelpers.py b/rtxHelpers.py index 6fdd903..89b5453 100644 --- a/rtxHelpers.py +++ b/rtxHelpers.py @@ -13,151 +13,151 @@ import logging import config def process_byte(in_byte): - """ takes the received byte and processes the command line - if a new command has been entered, it will call process_command() - if a short link has been entered, the link_list of the current page will be searched - and the found target will be sent to process_command() - """ - instr=str(in_byte, encoding="latin-1") - - if config.MODE=="modem": - logging.debug("> %s < CD: %s", instr, glob.ser.getCD()) + """ takes the received byte and processes the command line + if a new command has been entered, it will call process_command() + if a short link has been entered, the link_list of the current page will be searched + and the found target will be sent to process_command() + """ + instr=str(in_byte, encoding="latin-1") + + if config.MODE=="modem": + logging.debug("> %s < CD: %s", instr, glob.ser.getCD()) - # what to send back to the client - if instr == cept.INI: - logging.debug("INI") - echo_char = "*" - elif instr == cept.TER: - logging.debug("TER") - echo_char = "#" - else: - echo_char=instr + # what to send back to the client + if instr == cept.INI: + logging.debug("INI") + echo_char = "*" + elif instr == cept.TER: + logging.debug("TER") + echo_char = "#" + else: + echo_char=instr - # start of line: clear rest of cmdline - if len(glob.cmdline) == 0: - glob.ser.write(bytes(cept.CLEARLINE, "latin-1")) + # start of line: clear rest of cmdline + if len(glob.cmdline) == 0: + glob.ser.write(bytes(cept.CLEARLINE, "latin-1")) - # echo the character to the client - glob.ser.write(bytes(echo_char, "latin-1")) + # echo the character to the client + glob.ser.write(bytes(echo_char, "latin-1")) - glob.cmdline += instr + glob.cmdline += instr - # Backspace: - if instr == cept.BSP: - glob.cmdline = glob.cmdline[:-1] - return + # Backspace: + if instr == cept.BSP: + glob.cmdline = glob.cmdline[:-1] + return - logging.debug("Cmdline: >%s<", glob.cmdline) + logging.debug("Cmdline: >%s<", glob.cmdline) - # process links inside the page: - if ( len(glob.cmdline) == 1 or len(glob.cmdline) == 2 ) and glob.curpage.get_link(glob.cmdline): - glob.cmdline = cept.INI + glob.curpage.get_link(glob.cmdline) + cept.TER - process_command(glob.cmdline) - return + # process links inside the page: + if ( len(glob.cmdline) == 1 or len(glob.cmdline) == 2 ) and glob.curpage.get_link(glob.cmdline): + glob.cmdline = cept.INI + glob.curpage.get_link(glob.cmdline) + cept.TER + process_command(glob.cmdline) + return - # reset cmdline: - if instr == cept.INI and glob.cmdline[-2:] == cept.INI+cept.INI: - logging.debug("reset cmdline") - glob.cmdline = "" - glob.ser.write(bytes(cept.clear_line24, "latin-1")) - return + # reset cmdline: + if instr == cept.INI and glob.cmdline[-2:] == cept.INI+cept.INI: + logging.debug("reset cmdline") + glob.cmdline = "" + glob.ser.write(bytes(cept.clear_line24, "latin-1")) + return - # goto last page: - if instr == cept.TER and glob.cmdline == cept.INI+cept.TER: - if glob.prevpage.get_page_id() == -1: - glob.cmdline = "" - send_error("Keine vorige Seite vorhanden.") - return - glob.cmdline = "" # reset cmdline - goto_last_page() - return + # goto last page: + if instr == cept.TER and glob.cmdline == cept.INI+cept.TER: + if glob.prevpage.get_page_id() == -1: + glob.cmdline = "" + send_error("Keine vorige Seite vorhanden.") + return + glob.cmdline = "" # reset cmdline + goto_last_page() + return - # "Make it so": - if instr == cept.TER: - # or instr == cept.SEND or instr == cept.CR: - logging.info("Kommando: >%s<", glob.cmdline) - process_command(glob.cmdline) - return + # "Make it so": + if instr == cept.TER: + # or instr == cept.SEND or instr == cept.CR: + logging.info("Kommando: >%s<", glob.cmdline) + process_command(glob.cmdline) + return def process_command(cmd): - """ processes the given command line - """ + """ processes the given command line + """ - # reset cmdline - glob.cmdline = "" + # reset cmdline + glob.cmdline = "" - # process *cmdline#, normally a page-loading command: - if cmd[0] == cept.INI and cmd[-1:] == cept.TER: - pgnr = cmd[1:-1] - check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.") + # process *cmdline#, normally a page-loading command: + if cmd[0] == cept.INI and cmd[-1:] == cept.TER: + pgnr = cmd[1:-1] + check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.") - # if only # is entered, either go to the link behind '#' - # or to the next sub-page (2000a => 2000b) if it exists - if cmd == cept.TER: - if glob.curpage.get_link("#"): - pgnr = glob.curpage.get_link("#") - check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.") - else: - # check if the next page exists, e.g. 2000a => 2000b - curid = glob.curpage.get_page_id() - if curid[-1:].isalpha(): - # aus 2000a 2000b machen: - nextid = curid[:-1] + chr(ord(curid[-1:])+1) - check_and_send_page(nextid, "Keine n"+str(cept['UMLAUT'])+"achste Seite gefunden.") + # if only # is entered, either go to the link behind '#' + # or to the next sub-page (2000a => 2000b) if it exists + if cmd == cept.TER: + if glob.curpage.get_link("#"): + pgnr = glob.curpage.get_link("#") + check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.") + else: + # check if the next page exists, e.g. 2000a => 2000b + curid = glob.curpage.get_page_id() + if curid[-1:].isalpha(): + # aus 2000a 2000b machen: + nextid = curid[:-1] + chr(ord(curid[-1:])+1) + check_and_send_page(nextid, "Keine n"+str(cept['UMLAUT'])+"achste Seite gefunden.") - # special commands: - if cmd == "!1" + cept.TER: - send_welcome_page() - return - if cmd == "!2" + cept.TER: - glob.ser.write(bytes(cept.init_screen, "latin-1")) - return + # special commands: + if cmd == "!1" + cept.TER: + send_welcome_page() + return + if cmd == "!2" + cept.TER: + glob.ser.write(bytes(cept.init_screen, "latin-1")) + return def goto_last_page(): - """ go back to the previous page and make the current page the previous page - """ - logging.info("Letzte Seite: %s", str(glob.prevpage.get_page_id())) + """ go back to the previous page and make the current page the previous page + """ + logging.info("Letzte Seite: %s", str(glob.prevpage.get_page_id())) - # swap prevpage and curpage - temp = glob.curpage - glob.curpage = glob.prevpage - glob.prevpage = temp + # swap prevpage and curpage + temp = glob.curpage + glob.curpage = glob.prevpage + glob.prevpage = temp - # send the previous page (now curpage) to the client - send_page(glob.curpage) + # send the previous page (now curpage) to the client + send_page(glob.curpage) def send_welcome_page(): - """ get the btxlogo, make a rtxPage of it and send it to the client """ - wpage = rtxPage() - wpage.set_page(bytes(cept.btxlogo, "latin-1")) - send_page(wpage) + """ get the btxlogo, make a rtxPage of it and send it to the client """ + wpage = rtxPage() + wpage.set_page(bytes(cept.btxlogo, "latin-1")) + send_page(wpage) def check_and_send_page(pgnr, errormsg): - """ checks if the page "pgnr" exists - if yes, it loads it into curpage and sends it to the client - if not, it sends the error message "errormsg" to the client - """ - logging.info("suche Seite: >%s<", pgnr) + """ checks if the page "pgnr" exists + if yes, it loads it into curpage and sends it to the client + if not, it sends the error message "errormsg" to the client + """ + logging.info("suche Seite: >%s<", pgnr) - if rtxPage.exists(pgnr): - glob.prevpage = glob.curpage - glob.curpage = rtxPage(pgnr) - send_page(glob.curpage) # takes a rtxPage object! - return True - elif pgnr[-1:].isnumeric() and rtxPage.exists(pgnr + "a"): - glob.prevpage = glob.curpage - glob.curpage = rtxPage(pgnr + "a") - send_page(glob.curpage) # takes a rtxPage object! - return True - else: - send_error(errormsg) - return False + if rtxPage.exists(pgnr): + glob.prevpage = glob.curpage + glob.curpage = rtxPage(pgnr) + send_page(glob.curpage) # takes a rtxPage object! + return True + elif pgnr[-1:].isnumeric() and rtxPage.exists(pgnr + "a"): + glob.prevpage = glob.curpage + glob.curpage = rtxPage(pgnr + "a") + send_page(glob.curpage) # takes a rtxPage object! + return True + else: + send_error(errormsg) + return False def send_error(msg): - """ send an error message to the client """ - glob.ser.write(bytes(cept.error_prefix + msg + cept.error_suffix, "latin-1")) + """ send an error message to the client """ + glob.ser.write(bytes(cept.error_prefix + msg + cept.error_suffix, "latin-1")) def send_page(page): - """ sends a page to the client """ - glob.ser.write(page.get_page()) + """ sends a page to the client """ + glob.ser.write(page.get_page()) diff --git a/rtxModem.py b/rtxModem.py index 64125b7..0aa1b0c 100644 --- a/rtxModem.py +++ b/rtxModem.py @@ -12,51 +12,51 @@ import config import logging def init_modem(): - logging.debug("clearing input/output buffers") - glob.ser.reset_input_buffer() - glob.ser.reset_output_buffer() - """ send the modem init strings to the modem """ - logging.debug("init_modem") - if config.MODEM_INIT1 != "": - logging.debug("sending MODEM_INIT1") - glob.ser.write(bytes(config.MODEM_INIT1 + "\r", "latin-1")) - rc = _serial_readline() - logging.info("MODEM_INIT1: %s", rc) - rc = _serial_readline() - logging.info("MODEM_INIT1: %s", rc) + logging.debug("clearing input/output buffers") + glob.ser.reset_input_buffer() + glob.ser.reset_output_buffer() + """ send the modem init strings to the modem """ + logging.debug("init_modem") + if config.MODEM_INIT1 != "": + logging.debug("sending MODEM_INIT1") + glob.ser.write(bytes(config.MODEM_INIT1 + "\r", "latin-1")) + rc = _serial_readline() + logging.info("MODEM_INIT1: %s", rc) + rc = _serial_readline() + logging.info("MODEM_INIT1: %s", rc) - if config.MODEM_INIT2 != "": - logging.debug("sending MODEM_INIT2") - glob.ser.write(bytes(config.MODEM_INIT2 + "\r", "latin-1")) - rc = _serial_readline() - logging.info("MODEM_INIT2: %s", rc) - rc = _serial_readline() - logging.info("MODEM_INIT2: %s", rc) + if config.MODEM_INIT2 != "": + logging.debug("sending MODEM_INIT2") + glob.ser.write(bytes(config.MODEM_INIT2 + "\r", "latin-1")) + rc = _serial_readline() + logging.info("MODEM_INIT2: %s", rc) + rc = _serial_readline() + logging.info("MODEM_INIT2: %s", rc) def wait_for_caller(): - """ waits for the RING of the modem and answers it """ - modem_answered = False - logging.debug("wait_for_caller") - while not modem_answered: - rc = _serial_readline() - if rc.startswith(config.MODEM_RING): - logging.info("modem ringing! Answering.") - glob.ser.write(bytes(config.MODEM_ANSWER + "\r", "latin-1")) - rc = _serial_readline() - logging.info("Answer: %s", rc) - rc = _serial_readline() - logging.info("Answer: %s", rc) - modem_answered=True - else: - modem_answered=False + """ waits for the RING of the modem and answers it """ + modem_answered = False + logging.debug("wait_for_caller") + while not modem_answered: + rc = _serial_readline() + if rc.startswith(config.MODEM_RING): + logging.info("modem ringing! Answering.") + glob.ser.write(bytes(config.MODEM_ANSWER + "\r", "latin-1")) + rc = _serial_readline() + logging.info("Answer: %s", rc) + rc = _serial_readline() + logging.info("Answer: %s", rc) + modem_answered=True + else: + modem_answered=False def _serial_readline(): - line = "" - in_byte = "" - - while not in_byte == b"\n": - in_byte = glob.ser.read(1) - #print(in_byte) - line += str(in_byte, encoding="latin-1") + line = "" + in_byte = "" + + while not in_byte == b"\n": + in_byte = glob.ser.read(1) + #print(in_byte) + line += str(in_byte, encoding="latin-1") - return line + return line diff --git a/rtxPage.py b/rtxPage.py index 078f76e..599780a 100644 --- a/rtxPage.py +++ b/rtxPage.py @@ -12,103 +12,103 @@ import config import logging class rtxPage: - """ Klasse zur Benutzung einer CEPT-Seite - """ + """ Klasse zur Benutzung einer CEPT-Seite + """ - die_seite = "" - seiten_nummer = -1 - link_liste = {} + die_seite = "" + seiten_nummer = -1 + link_liste = {} - def __init__(self, page = None): - """ create a new page object for the page 'page' - returns False if the page cannot be found - returns True if the page has been loaded - """ - if page == None: - return - else: - self.die_seite = "" - self.seiten_nummer = -1 - self.link_liste = {} - self._load_page(page) + def __init__(self, page = None): + """ create a new page object for the page 'page' + returns False if the page cannot be found + returns True if the page has been loaded + """ + if page == None: + return + else: + self.die_seite = "" + self.seiten_nummer = -1 + self.link_liste = {} + self._load_page(page) - @staticmethod - def exists(page): - """ checks if the page (i.e. the file) exists """ - if os.path.isfile(config.PAGES + page): - return True - elif os.path.isfile(config.DEMOPAGES + page): - return True - else: - return False + @staticmethod + def exists(page): + """ checks if the page (i.e. the file) exists """ + if os.path.isfile(config.PAGES + page): + return True + elif os.path.isfile(config.DEMOPAGES + page): + return True + else: + return False - def get_page(self): - """ returns the page if loaded - returns False if no page has been loaded - """ - if self.die_seite != "": - return self.die_seite - else: - return False + def get_page(self): + """ returns the page if loaded + returns False if no page has been loaded + """ + if self.die_seite != "": + return self.die_seite + else: + return False - def set_page(self,pagedata): - """ write the pagedata as the new page and (probably) the link list """ - self.die_seite = pagedata - self.link_liste = self._get_link_list() + def set_page(self,pagedata): + """ write the pagedata as the new page and (probably) the link list """ + self.die_seite = pagedata + self.link_liste = self._get_link_list() - def get_links(self): - """ returns the list of links found in this page """ - return self.link_liste + def get_links(self): + """ returns the list of links found in this page """ + return self.link_liste - def get_link(self, link): - """ returns the target for a given link - returns False if this link does not exist - """ - if link in self.link_liste: - return self.link_liste[link] - else: - return False + def get_link(self, link): + """ returns the target for a given link + returns False if this link does not exist + """ + if link in self.link_liste: + return self.link_liste[link] + else: + return False - def get_page_id(self): - """ returns the id of the current page """ - return self.seiten_nummer + def get_page_id(self): + """ returns the id of the current page """ + return self.seiten_nummer - def _load_page(self, page): - """ Load a CEPT page from the file system - returns False if the page cannot be found - returns True if the page has been loaded - """ - if os.path.isfile(config.PAGES + page): - filename = config.PAGES + page - elif os.path.isfile(config.DEMOPAGES + page): - filename = config.DEMOPAGES + page - else: - return False - - with open(filename, "rb") as f: - self.die_seite = f.read() - self.seiten_nummer = page - link_liste = self._get_link_list() - return True + def _load_page(self, page): + """ Load a CEPT page from the file system + returns False if the page cannot be found + returns True if the page has been loaded + """ + if os.path.isfile(config.PAGES + page): + filename = config.PAGES + page + elif os.path.isfile(config.DEMOPAGES + page): + filename = config.DEMOPAGES + page + else: + return False + + with open(filename, "rb") as f: + self.die_seite = f.read() + self.seiten_nummer = page + link_liste = self._get_link_list() + return True - def _get_link_list(self): - """ private function which parses the CEPT page and extracts the link list - returns True if links have been found - returns False if no links have been found - """ - links = [] - links = re.findall("\x1f\x3d([^\x1f\x9b\x1b]+)", str(self.die_seite, "latin-1")) + def _get_link_list(self): + """ private function which parses the CEPT page and extracts the link list + returns True if links have been found + returns False if no links have been found + """ + links = [] + links = re.findall("\x1f\x3d([^\x1f\x9b\x1b]+)", str(self.die_seite, "latin-1")) - for item in links: - if item[0] != "0": - link = item[1:3].strip() - target = item[3:].strip() - self.link_liste[link] = target + for item in links: + if item[0] != "0": + link = item[1:3].strip() + target = item[3:].strip() + self.link_liste[link] = target - logging.info(self.link_liste) + logging.info(self.link_liste) - if self.link_liste == {}: - return False - else: - return True + if self.link_liste == {}: + return False + else: + return True