mirror of
https://github.com/lowobservable/oec.git
synced 2026-01-11 23:53:04 +00:00
Device name (LU) negotiation
This commit is contained in:
parent
0f09a5a1cf
commit
2581b7bc6f
@ -20,6 +20,7 @@ emulation.
|
||||
- [x] TN3270
|
||||
- [x] Extended Data Stream
|
||||
- [x] Basic TN3270E
|
||||
- [x] Device name (_LU_) negotiation
|
||||
- [ ] SSL/TLS
|
||||
- [x] VT100
|
||||
- [ ] Connection menu
|
||||
|
||||
@ -77,7 +77,7 @@ def _create_device(args, interface, device_address, poll_response):
|
||||
|
||||
def _create_session(args, device):
|
||||
if args.emulator == 'tn3270':
|
||||
return TN3270Session(device, args.host, args.port, args.character_encoding)
|
||||
return TN3270Session(device, args.host, args.port, args.device_names, args.character_encoding)
|
||||
|
||||
if args.emulator == 'vt100' and IS_VT100_AVAILABLE:
|
||||
host_command = [args.command, *args.command_args]
|
||||
@ -89,7 +89,6 @@ def _create_session(args, device):
|
||||
def parse_tn3270_host_args(args, parser):
|
||||
elements = args.host.rsplit(':', 1)
|
||||
|
||||
host = elements[0]
|
||||
port = None
|
||||
|
||||
if len(elements) > 1:
|
||||
@ -106,7 +105,18 @@ def parse_tn3270_host_args(args, parser):
|
||||
else:
|
||||
logger.warning('The port argument is deprecated and will be removed in the future, port from host:port is being used.')
|
||||
|
||||
return (host, port if port is not None else 23)
|
||||
if port is None:
|
||||
port = 23
|
||||
|
||||
elements = elements[0].split('@', 1)
|
||||
|
||||
host = elements[-1]
|
||||
device_names = None
|
||||
|
||||
if len(elements) > 1:
|
||||
device_names = elements[0].split(',')
|
||||
|
||||
return (host, port, device_names)
|
||||
|
||||
def _signal_handler(number, frame):
|
||||
global CONTROLLER
|
||||
@ -134,8 +144,8 @@ def main():
|
||||
tn3270_parser = subparsers.add_parser('tn3270', description='TN3270 emulator',
|
||||
help='TN3270 emulator')
|
||||
|
||||
tn3270_parser.add_argument('host', metavar='host[:port]',
|
||||
help='host and optional port')
|
||||
tn3270_parser.add_argument('host', metavar='[lu[,lu...]@]host[:port]',
|
||||
help='host and optional port and LUs')
|
||||
tn3270_parser.add_argument('port', nargs='?', type=int, help=argparse.SUPPRESS)
|
||||
|
||||
tn3270_parser.add_argument('--codepage', metavar='encoding', default='ibm037',
|
||||
@ -152,7 +162,7 @@ def main():
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.emulator == 'tn3270':
|
||||
(args.host, args.port) = parse_tn3270_host_args(args, parser)
|
||||
(args.host, args.port, args.device_names) = parse_tn3270_host_args(args, parser)
|
||||
|
||||
create_device = lambda interface, device_address, poll_response: _create_device(args, interface, device_address, poll_response)
|
||||
create_session = lambda device: _create_session(args, device)
|
||||
|
||||
@ -47,13 +47,14 @@ AID_KEY_MAP = {
|
||||
class TN3270Session(Session):
|
||||
"""TN3270 session."""
|
||||
|
||||
def __init__(self, terminal, host, port, character_encoding):
|
||||
def __init__(self, terminal, host, port, device_names, character_encoding):
|
||||
super().__init__(terminal)
|
||||
|
||||
self.logger = logging.getLogger(__name__)
|
||||
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.device_names = device_names
|
||||
self.character_encoding = character_encoding
|
||||
|
||||
self.telnet = None
|
||||
@ -192,7 +193,7 @@ class TN3270Session(Session):
|
||||
|
||||
self.telnet = Telnet(terminal_type)
|
||||
|
||||
self.telnet.open(self.host, self.port)
|
||||
self.telnet.open(self.host, self.port, self.device_names)
|
||||
|
||||
if self.telnet.is_tn3270e_negotiated:
|
||||
self.logger.info(f'TN3270E mode negotiated: Device Type = {self.telnet.device_type}, Device Name = {self.telnet.device_name}')
|
||||
|
||||
@ -3,7 +3,7 @@ ptyprocess==0.7.0
|
||||
pycoax==0.11.1
|
||||
pyserial==3.5
|
||||
pyte==0.8.1
|
||||
pytn3270==0.13.0
|
||||
pytn3270==0.14.0
|
||||
sliplib==0.6.2
|
||||
sortedcontainers==2.4.0
|
||||
wcwidth==0.2.5
|
||||
|
||||
@ -24,7 +24,7 @@ class SessionHandleHostTestCase(unittest.TestCase):
|
||||
|
||||
self.terminal = _create_terminal(self.interface)
|
||||
|
||||
self.session = TN3270Session(self.terminal, 'mainframe', 23, 'ibm037')
|
||||
self.session = TN3270Session(self.terminal, 'mainframe', 23, None, 'ibm037')
|
||||
|
||||
self.telnet = create_autospec(Telnet, instance=True)
|
||||
|
||||
@ -71,7 +71,7 @@ class SessionHandleKeyTestCase(unittest.TestCase):
|
||||
|
||||
self.terminal = _create_terminal(self.interface)
|
||||
|
||||
self.session = TN3270Session(self.terminal, 'mainframe', 23, 'ibm037')
|
||||
self.session = TN3270Session(self.terminal, 'mainframe', 23, None, 'ibm037')
|
||||
|
||||
self.session.emulator = create_autospec(Emulator, instance=True)
|
||||
|
||||
@ -251,7 +251,7 @@ class SessionRenderTestCase(unittest.TestCase):
|
||||
self.terminal.display.flush = Mock(wraps=self.terminal.display.flush)
|
||||
self.terminal.display.status_line.write = Mock(wraps=self.terminal.display.status_line.write)
|
||||
|
||||
self.session = TN3270Session(self.terminal, 'mainframe', 23, 'ibm037')
|
||||
self.session = TN3270Session(self.terminal, 'mainframe', 23, None, 'ibm037')
|
||||
|
||||
self.session.telnet = create_autospec(Telnet, instance=True)
|
||||
self.session.emulator = create_autospec(Emulator, instance=True)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user