Challenge Overview
Note - The challenge will be reviewed jointly by the client and copilot
Welcome to the CAIL6530 iPad App - Block Mode POC Implementation + Bug Fixes challenge.
The client wants to develop an iPad app that emulates a text based terminal called "Tandem 6530" on iOS tablets. The App will allow users to access legacy, text based applications running on HP NonStop (formerly Tandem) mainframe systems. The app will be used by financial and manufacturing companies to connect to these mainframe systems.
The client has already built an Android app (source code for the same is provided in forums). We also have a Objective-C proof of concept which isn’t stable and not the highest code quality but can be used as a reference to see how it works.
There’s also the T-Term Pro app on the App Store which closely describes what we’re trying to build.
As part of the last challenge, we built a PoC which implements the conversational mode. You need to work off the PoC codebase (request access via forums) We now want to fix some bugs in the conversational mode and implement the block mode
Challenge Requirements
The key requirement for this app is to support two modes - block mode and conversation mode. Conversational mode is implemented but the following bugs need to be fixed.
A) We want to fix the following issues from the last challenge for conversational mode
-
When you disconnect, the app should display a message (Remote Disconnect) and return to the connect screen. The app does not recognise a remote disconnect.
-
No status line (line 25 on the screen). I did write a line 25 tester on the linux box (cat write25), and its output appeared at the top right of the display, to the right of “Connected”. Note that the status line must react to attributes just like the main screen. Please refer to the Android version for what line 25 should look like
-
Cursor should be a block or underscore, flashing or static. The vertical line is difficult to see and use
-
Lines should be displayed as they come in. Currently it appears to get the full listing (fileinfo, for instance), and then display it. Some users do very long (>1000 lines) listings, and the delay between starting the listing and anything showing up will be too long unless they are displayed as they come in
-
Display should always be 24x80 + the status line. It seemed to be 24x80 in landscape mode, but there were more rows in portrait mode. Font size should change between portrait and landscape modes e.g in landscape mode, lines are cut off - https://cl.ly/2t1c3114383v and user needs to scroll to see them
-
The arrow keys should move the cursor around the screen while in conversational mode (right, down, and up) but not send anything to the host, while the left arrow key should act as backspace.
-
Connect button should be disabled until a host and port are specified. Otherwise, it leads to https://cl.ly/1H3r2j3Z0w3C
-
All Conversational mode escape sequences must be implemented. Test details provided in forums.
B) We want to implement block mode
-
Note that 6530 uses embedded attributes (a character location on the screen is used to denote the start of a new attribute, and is in effect until the next attribute location on the screen, or the end of the screen).
-
Many escape sequences are very similar between Conversational and Block modes and the main difference is Block mode frames transmissions with special characters, and an escape sequence from the host can be writing to a buffer or the current visible screen.
The following escape sequences need to be implemented (see forums for tests that MUST work)
Conversational mode:
SOH C Enter block mode
Block mode:
Esc ^ Read terminal status
Esc p Set max page number
Esc W Enter protect submode
Esc X Exit protect submode
SOH C Exit block mode
The following escape sequences are implemented but do not work correctly
-
Esc A (Cursor Up)
-
DC3 (Set Cursor Address)
-
Esc – D (Set Cursor Address Extended)
-
Esc C (Cursor Right)
-
Esc F (Cursor Home Down)
-
Esc S (Roll Up)
-
Esc a (Read Cursor)
Note that there will be more non-working Conversational escape sequences, since only two of the first 9 we tested actually worked. They will be added here as they are found.
In the forums, we are providing a TCP/IP trace of a session connecting, logging in, starting Tedit, adding some lines to the file in Tedit, exiting Tedit, and logging off (i.e. closing the session) - so this will help you understand how block mode works.
NOTES
-
The application Must support LINEMODE (when a user types in something it isn’t sent until they hit “Enter”, or the maximum number of characters the host asked for in the negotiation is reached), which is part of the telnet protocol. This is extremely important because if you use character mode (each character typed is sent to the host, echoed back and displayed on the screen), the emulator becomes very slow. This is already implemented
Evaluation/ Review Criteria
- All mentioned bugs will be fixed + the application must connection to the sample 6530 server (details provided in forum) and be able to run the tedit program in block mode (details in forum). The existing conversational mode must also work correctly with the bug fixes mentioned above.
Challenge Assets
-
Existing app source code with conversation mode implemented (request access via forums)
-
Android App source code
-
XPrize Objective C Proof of Concept
-
Connection information to sample HP server including VPN connectivity
-
6530 Manual
General Notes
NOTES
-
Only iPad device is in scope.
-
All source code changes must be well commented and MUST follow existing coding conventions
-
If you face any API issues or have doubts related to request response for any API, please raise it in the forums so it can be clarified by client.
-
The app works in both portrait and landscape modes
-
App must support 2x and 3x assets and retina devices
-
App must support iOS 10.x
-
All code must be written in the latest version Swift and the project must use latest XCode version. Do not use Objective-C or Bridging approach
-
Please ask in the forums if you wish to use any open-source third-party libs to ensure there are no license violations
Final Submission Guidelines
- Updated XCode Project with all source code that addresses the requirements
- Deployment guide with configuration & verification steps. Describe all config params and include steps to run
- Demo video (Mandatory and will be scored down if not provided)
- Winner will be asked to raise a PR to the repo