diff --git a/utils/scripts/opcode_handlers.py b/utils/scripts/opcode_handlers.py index fb3923209..e5a25084a 100644 --- a/utils/scripts/opcode_handlers.py +++ b/utils/scripts/opcode_handlers.py @@ -14,6 +14,7 @@ values, server handler and whether opcodes are translated on tx/rx, etc... import sys import os +import fnmatch from time import time, ctime @@ -23,8 +24,10 @@ VERBOSE = False # messaging: {False - minimal, True - robust} base_path = os.getcwd()[:-14] # '/utils/scripts' base_path = base_path.replace('\\', '/') -client_list = ['6.2', 'Titanium', 'SoF', 'SoD', 'UF', 'RoF', 'RoF2'] -server_list = ['Login', 'World', 'Zone', 'UCS'] +client_list = ['Titanium', 'SoF', 'SoD', 'UF', 'RoF', 'RoF2'] +server_list = ['Login', 'World', 'Zone', 'UCS', 'Common'] # 'Common' is not a server..but, may contain shared functions +server_dir = {'Login': 'loginserver', 'World': 'world', 'Zone': 'zone', 'UCS': 'ucs', 'Common': 'common'} +file_exts = ['cpp', 'h'] client_opcodes = {} # x[key='Client'][key='OP_CodeName'](value='0x####') server_opcodes = {} # x[key='OP_CodeName'](value=) - opcodes apply to all servers @@ -87,12 +90,6 @@ def main(): if fault: faults.append('loadclienttranslators()') - if not fault: - fault = not loadserverhandlers() - - if fault: - faults.append('loadserverhandlers()') - if not fault: fault = not discoverserverhandlers() @@ -280,18 +277,29 @@ def loadclientopcodes(): value = int(data_line[(val_begin + 2):val_end].lower(), 16) if value == 0: + if VERBOSE: + uprint('\nUNDEFINED OPCODE FOUND: ../utils/patches{0}({1}:{2}) [{3}][{4}] = {5}\n'.format( + short_name, + line_no, + key_begin, + client, + data_line[key_begin:key_end], + '0x{0}'.format(hex(value)[2:].zfill(4)) + )) + continue client_opcodes[client][data_line[key_begin:key_end]] = '0x{0}'.format(hex(value)[2:].zfill(4)) - dprint('../utils/patches{0}({1}:{2}) [{3}][{4}] = {5}\n'.format( - short_name, - line_no, - key_begin, - client, - data_line[key_begin:key_end], - client_opcodes[client][data_line[key_begin:key_end]] - )) + if VERBOSE: + dprint('../utils/patches{0}({1}:{2}) [{3}][{4}] = {5}\n'.format( + short_name, + line_no, + key_begin, + client, + data_line[key_begin:key_end], + client_opcodes[client][data_line[key_begin:key_end]] + )) data_file.close() @@ -377,12 +385,13 @@ def loadserveropcodes(): server_opcodes[data_line[val_begin:val_end]] = value value += 1 - dprint('../common/emu_oplist.h({0}:{1}) \'Servers\' [{2}] = {3}\n'.format( - line_no, - val_begin, - data_line[val_begin:val_end], - server_opcodes[data_line[val_begin:val_end]] - )) + if VERBOSE: + dprint('../common/emu_oplist.h({0}:{1}) \'Servers\' [{2}] = {3}\n'.format( + line_no, + val_begin, + data_line[val_begin:val_end], + server_opcodes[data_line[val_begin:val_end]] + )) data_file.close() @@ -409,12 +418,13 @@ def loadserveropcodes(): server_opcodes[data_line[val_begin:val_end]] = value value += 1 - dprint('../common/mail_oplist.h({0}:{1}) \'Servers\' [{2}] = {3}\n'.format( - line_no, - val_begin, - data_line[val_begin:val_end], - server_opcodes[data_line[val_begin:val_end]] - )) + if VERBOSE: + dprint('../common/mail_oplist.h({0}:{1}) \'Servers\' [{2}] = {3}\n'.format( + line_no, + val_begin, + data_line[val_begin:val_end], + server_opcodes[data_line[val_begin:val_end]] + )) data_file.close() @@ -454,10 +464,7 @@ def loadclienttranslators(): for client in client_list: try: - if client == '6.2': - short_name = '/client62_ops.h' - else: - short_name = '/{0}_ops.h'.format(client).lower() + short_name = '/{0}_ops.h'.format(client).lower() file_name = '{0}/common/patches{1}'.format( base_path, @@ -484,23 +491,25 @@ def loadclienttranslators(): if data_line[:1] == 'E': client_encodes[client].append(data_line[val_begin:val_end]) - dprint('..{0}({1}:{2}) \'ENCODE\' [{3}] = {4}\n'.format( - short_name, - line_no, - val_begin, - client, - data_line[val_begin:val_end] - )) + if VERBOSE: + dprint('..{0}({1}:{2}) \'ENCODE\' [{3}] = {4}\n'.format( + short_name, + line_no, + val_begin, + client, + data_line[val_begin:val_end] + )) elif data_line[:1] == 'D': client_decodes[client].append(data_line[val_begin:val_end]) - dprint('..{0}({1}:{2}) \'DECODE\' [{3}] = {4}\n'.format( - short_name, - line_no, - val_begin, - client, - data_line[val_begin:val_end] - )) + if VERBOSE: + dprint('..{0}({1}:{2}) \'DECODE\' [{3}] = {4}\n'.format( + short_name, + line_no, + val_begin, + client, + data_line[val_begin:val_end] + )) data_file.close() @@ -542,180 +551,10 @@ def loadclienttranslators(): return True -def loadserverhandlers(): - """ Load pre-designated SERVER OPCODE HANDLERS """ - - # TODO: handle remarked out definitions in file (i.e., // and /**/) - - dprint('entering \'loadserverhandlers()\'\n') - - bad_servers = [] - - for server in server_list: - try: - if server == 'Login': - vprint('No pre-designated server opcode handlers for \'Login\'') - dprint('->pass: \'Login\' server\n') - - continue - elif server == 'World': - vprint('No pre-designated server opcode handlers for \'World\'') - dprint('->pass: \'World\' server\n') - - continue - elif server == 'Zone': - file_name = '{0}/zone/client_packet.cpp'.format(base_path) - - vprint(file_name) - - with open(file_name, 'r') as data_file: - dprint('->open: \'{0}\' in \'r\' mode\n'.format(file_name)) - - server_handlers[server] = {} - handler_assigns = {} - step_1 = False - step_2 = False - line_no = 0 - hint = 'Near beginning of file' - - for data_line in data_file: - line_no += 1 - read_begin = 0 - - if step_1 is False: - if data_line[:19] == 'void MapOpcodes() {': - step_1 = True - - continue - - if step_2 is False: - if data_line[0:1] == '}': - step_2 = True - - continue - - val_begin = data_line.find('OP_', read_begin) - val_end = data_line.find(']', val_begin) - - if val_begin < 0 or val_end < 0: - continue - - if not data_line[val_begin:val_end] in server_opcodes: - dprint('\nILLEGAL OPCODE FOUND: ../zone/client_packet.cpp({0}:{1}) \'{2}\'\n'.format( - line_no, - val_begin, - data_line[val_begin:val_end] - )) - - continue - - key_begin = data_line.find('Client::', val_end) - key_end = data_line.find(';', key_begin) - - if key_begin < 0 or key_end < 0: - continue - - if not data_line[key_begin:key_end] in handler_assigns: - handler_assigns[data_line[key_begin:key_end]] = data_line[val_begin:val_end] - - continue - - if data_line[:1].isalpha(): - hint_begin = 0 - hint_end = data_line.find('(') - - if not hint_end < 0: - hint_begin = hint_end - 1 - - while not hint_begin < 0: - if data_line[(hint_begin - 1):hint_begin].isspace(): - if not data_line[hint_begin:(hint_begin + 1)].isalpha(): - hint_begin += 1 - - hint = '[RX] Near {0}'.format(data_line[hint_begin:hint_end]) - - break - - hint_begin -= 1 - else: - continue - - if hint[10:] in handler_assigns: - if not handler_assigns[hint[10:]] in server_handlers[server]: - server_handlers[server][handler_assigns[hint[10:]]] = [] - - server_handlers[server][handler_assigns[hint[10:]]].append( - '../zone/client_packet.cpp({0}:{1}) \'{2}\''.format( - line_no, - hint_begin, - hint - ) - ) - - dprint('../zone/client_packet.cpp({0}:{1}) [{2}][{3}] = \'{4}\'\n'.format( - line_no, - hint_begin, - server, - handler_assigns[hint[10:]], - hint - )) - - del handler_assigns[hint[10:]] - - if len(handler_assigns) > 0: - for unhandled in handler_assigns: - dprint('\nUNMATCHED DESIGNATED HANDLER FOUND: ../zone/client_packet.cpp \'{0}\'\n'.format( - unhandled - )) - - data_file.close() - - dprint('->close: \'{0}\'\n'.format(file_name)) - elif server == 'UCS': - vprint('No pre-designated server opcode handlers for \'UCS\'') - dprint('->pass: \'UCS\' server\n') - - continue - else: - vprint('No pre-designated server opcode handlers for \'{0}\''.format(server)) - dprint('->pass: \'{0}\' server\n'.format(server)) - - continue - except: - print('(Exception Error: {0}) loadserverhandlers() [{1}]'.format( - sys.exc_info()[0], - server - )) - - dprint('<-except: \'{0} [{1}]\'\n'.format( - sys.exc_info()[0], - server - )) - - bad_servers.append(server) - - for bad_server in bad_servers: - if bad_server in server_handlers: - vprint('Deleting stale entries for \'{0}\' server...'.format(bad_server)) - - del server_handlers[bad_server] - - dprint('->delete: \'{0}\' server designated handler entries\n'.format(bad_server)) - - dprint('leaving \'loadserverhandlers()\'\n\n') - - return True - - def discoverserverhandlers(): """ Load undefined SERVER OPCODE HANDLERS using 'discovery' method - When adding new servers and/or search locations, use the following format: - - if 'Server' in locations: - locations['Server'].append('//.') - Lists are instantiated for all SERVERS in SERVER LIST. The lists are then appended with location data based on the presence of the SERVER in the parent dictionary. @@ -733,60 +572,20 @@ def discoverserverhandlers(): if not server in locations: locations[server] = [] - if 'Login' in locations: - locations['Login'].append('/loginserver/client.cpp') - locations['Login'].append('/loginserver/server_manager.cpp') - locations['Login'].append('/loginserver/world_server.cpp') + for server in locations: + file_path = '{0}/{1}/'.format(base_path, server_dir[server]) - if 'World' in locations: - locations['World'].append('/world/client.cpp') + file_list = os.listdir(file_path) - if 'Zone' in locations: - locations['Zone'].append('/zone/aa.cpp') - locations['Zone'].append('/zone/attack.cpp') - locations['Zone'].append('/zone/bot.cpp') - locations['Zone'].append('/zone/bot_command.cpp') - locations['Zone'].append('/zone/client.cpp') - locations['Zone'].append('/zone/client_packet.cpp') - locations['Zone'].append('/zone/client_process.cpp') - locations['Zone'].append('/zone/command.cpp') - locations['Zone'].append('/zone/corpse.cpp') - locations['Zone'].append('/zone/doors.cpp') - locations['Zone'].append('/zone/effects.cpp') - locations['Zone'].append('/zone/entity.cpp') - locations['Zone'].append('/zone/exp.cpp') - locations['Zone'].append('/zone/groups.cpp') - locations['Zone'].append('/zone/guild.cpp') - locations['Zone'].append('/zone/guild_mgr.cpp') - locations['Zone'].append('/zone/horse.cpp') - locations['Zone'].append('/zone/inventory.cpp') - locations['Zone'].append('/zone/loottables.cpp') - locations['Zone'].append('/zone/merc.cpp') - locations['Zone'].append('/zone/mob.cpp') - locations['Zone'].append('/zone/mob_ai.cpp') - locations['Zone'].append('/zone/object.cpp') - locations['Zone'].append('/zone/pathing.cpp') - locations['Zone'].append('/zone/petitions.cpp') - locations['Zone'].append('/zone/questmgr.cpp') - locations['Zone'].append('/zone/raids.cpp') - locations['Zone'].append('/zone/special_attacks.cpp') - locations['Zone'].append('/zone/spells.cpp') - locations['Zone'].append('/zone/spell_effects.cpp') - locations['Zone'].append('/zone/tasks.cpp') - locations['Zone'].append('/zone/titles.cpp') - locations['Zone'].append('/zone/tradeskills.cpp') - locations['Zone'].append('/zone/trading.cpp') - locations['Zone'].append('/zone/trap.cpp') - locations['Zone'].append('/zone/tribute.cpp') - locations['Zone'].append('/zone/worldserver.cpp') - locations['Zone'].append('/zone/zone.cpp') - locations['Zone'].append('/zone/zonedb.cpp') - locations['Zone'].append('/zone/zoning.cpp') + for extension in file_exts: + dprint('->file discovery: \'{0}*.{1}\'\n'.format(file_path, extension)) - if 'UCS' in locations: - locations['UCS'].append('/ucs/clientlist.cpp') - locations['UCS'].append('/ucs/database.cpp') + for file_name in fnmatch.filter(file_list, '*.{0}'.format(extension)): + if file_name in ['emu_oplist.h', 'mail_oplist.h', 'opcode_dispatch.h', 'opcode_map.cpp', 'op_codes.h']: + continue + locations[server].append('/{0}/{1}'.format(server_dir[server], file_name)) + for server in server_list: if not server in server_handlers: server_handlers[server] = {} @@ -831,7 +630,385 @@ def discoverserverhandlers(): if op_begin < 0: continue - if data_line[(op_begin - 20):op_begin] == 'EQApplicationPacket(': + # exclusions + if data_line[(op_begin - 6):op_begin] == 'Server': + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nUNHANDLED SERVER TALK OPCODE REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[(op_begin - 1):op_begin].isalnum(): + continue + elif data_line[read_begin:op_begin].find('//', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nREMARKED OPCODE REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('Log(Logs::', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nLOGGING OPCODE REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('Message', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nCLIENT MESSAGE OPCODE REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('std::cout', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nCONSOLE MESSAGE OPCODE REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('MakeAnyLenString', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nSTRING FORMAT OPCODE REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('printf', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nSTRING FORMAT OPCODE REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('VERIFY_PACKET_LENGTH', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nPACKET LENGTH OPCODE REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('ConnectingOpcodes', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nOPCODE HANDLER ASSIGNMENT REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('ConnectedOpcodes', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nOPCODE HANDLER ASSIGNMENT REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('command_add', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nCOMMAND HANDLER ASSIGNMENT OPCODE REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[read_begin:op_begin].find('luabind::value', 0) >= 0: + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nLUA API OPCODE ASSIGNMENT REFERENCE FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[(op_begin - 3):op_begin] == '!= ': + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[(op_begin - 2):op_begin] == '!=': + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[(op_begin - 3):op_begin] == '>= ': + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[(op_begin - 2):op_begin] == '>=': + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[(op_begin - 3):op_begin] == '<= ': + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + elif data_line[(op_begin - 2):op_begin] == '<=': + if VERBOSE: + key_begin = op_begin + key_end = key_begin + 3 + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + + dprint( + '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' + '->line: \'{4}\'\n'.format( + location, + line_no, + key_begin, + data_line[key_begin:key_end], + data_line[:-1] + ) + ) + + continue + # inclusions + elif data_line[(op_begin - 20):op_begin] == 'EQApplicationPacket(': + key_begin = op_begin + key_end = key_begin + 3 + direction = '[TX]' + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + elif data_line[(op_begin - 1):op_begin] == '(' and data_line[read_begin:op_begin].find('EQApplicationPacket', 0) >= 0: + key_begin = op_begin + key_end = key_begin + 3 + direction = '[TX]' + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + elif data_line[(op_begin - 2):op_begin] == ' (' and data_line[read_begin:op_begin].find('EQApplicationPacket', 0) >= 0: key_begin = op_begin key_end = key_begin + 3 direction = '[TX]' @@ -843,6 +1020,13 @@ def discoverserverhandlers(): key_end = key_begin + 3 direction = '[TX]' + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + elif data_line[(op_begin - 11):op_begin] == '.SetOpcode(': + key_begin = op_begin + key_end = key_begin + 3 + direction = '[TX]' + while data_line[key_end:(key_end + 1)].isalnum(): key_end += 1 elif data_line[(op_begin - 5):op_begin] == 'case ': @@ -850,6 +1034,20 @@ def discoverserverhandlers(): key_end = key_begin + 3 direction = '[RX]' + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + elif data_line[(op_begin - 7):op_begin] == 'Handle_': + key_begin = op_begin + key_end = key_begin + 3 + direction = '[RX]' + + while data_line[key_end:(key_end + 1)].isalnum(): + key_end += 1 + elif data_line[(op_begin - 15):op_begin] == 'Handle_Connect_': + key_begin = op_begin + key_end = key_begin + 3 + direction = '[RX]' + while data_line[key_end:(key_end + 1)].isalnum(): key_end += 1 elif data_line[(op_begin - 3):op_begin] == '== ': @@ -866,120 +1064,6 @@ def discoverserverhandlers(): while data_line[key_end:(key_end + 1)].isalnum(): key_end += 1 - elif data_line[(op_begin - 3):op_begin] == '!= ': - key_begin = op_begin - key_end = key_begin + 3 - - while data_line[key_end:(key_end + 1)].isalnum(): - key_end += 1 - - dprint( - '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' - '->line: \'{4}\'\n'.format( - location, - line_no, - key_begin, - data_line[key_begin:key_end], - data_line[:-1] - ) - ) - - continue - elif data_line[(op_begin - 2):op_begin] == '!=': - key_begin = op_begin - key_end = key_begin + 3 - - while data_line[key_end:(key_end + 1)].isalnum(): - key_end += 1 - - dprint( - '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' - '->line: \'{4}\'\n'.format( - location, - line_no, - key_begin, - data_line[key_begin:key_end], - data_line[:-1] - ) - ) - - continue - elif data_line[(op_begin - 3):op_begin] == '>= ': - key_begin = op_begin - key_end = key_begin + 3 - - while data_line[key_end:(key_end + 1)].isalnum(): - key_end += 1 - - dprint( - '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' - '->line: \'{4}\'\n'.format( - location, - line_no, - key_begin, - data_line[key_begin:key_end], - data_line[:-1] - ) - ) - - continue - elif data_line[(op_begin - 2):op_begin] == '>=': - key_begin = op_begin - key_end = key_begin + 3 - - while data_line[key_end:(key_end + 1)].isalnum(): - key_end += 1 - - dprint( - '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' - '->line: \'{4}\'\n'.format( - location, - line_no, - key_begin, - data_line[key_begin:key_end], - data_line[:-1] - ) - ) - - continue - elif data_line[(op_begin - 3):op_begin] == '<= ': - key_begin = op_begin - key_end = key_begin + 3 - - while data_line[key_end:(key_end + 1)].isalnum(): - key_end += 1 - - dprint( - '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' - '->line: \'{4}\'\n'.format( - location, - line_no, - key_begin, - data_line[key_begin:key_end], - data_line[:-1] - ) - ) - - continue - elif data_line[(op_begin - 2):op_begin] == '<=': - key_begin = op_begin - key_end = key_begin + 3 - - while data_line[key_end:(key_end + 1)].isalnum(): - key_end += 1 - - dprint( - '\nILL-DEFINED OPCODE CONDITIONAL FOUND: ..{0}({1}:{2}) \'{3}\'\n' - '->line: \'{4}\'\n'.format( - location, - line_no, - key_begin, - data_line[key_begin:key_end], - data_line[:-1] - ) - ) - - continue elif data_line[(op_begin - 2):op_begin] == '= ': key_begin = op_begin key_end = key_begin + 3 @@ -994,6 +1078,7 @@ def discoverserverhandlers(): while data_line[key_end:(key_end + 1)].isalnum(): key_end += 1 + # fall-through else: key_begin = op_begin key_end = key_begin + 3 @@ -1042,15 +1127,16 @@ def discoverserverhandlers(): ) ) - dprint('..{0}({1}:{2}) [{3}][{4}] = \'{5} {6}\'\n'.format( - location, - line_no, - key_begin, - server, - data_line[key_begin:key_end], - direction, - hint - )) + if VERBOSE: + dprint('..{0}({1}:{2}) [{3}][{4}] = \'{5} {6}\'\n'.format( + location, + line_no, + key_begin, + server, + data_line[key_begin:key_end], + direction, + hint + )) data_file.close()