CheckRide readme

1. Help, it doesn't work?
If you are running CheckRide.exe, your helper probably hasn't completely read this file, so he or she forgot to configure the program correctly.
Symptom: the program shows this line:
Setting up connection to helper Wonko the Sane at changethisline.example.com:33334.
and it seems to work, but your helper cannot take over your screen.
This means that your helper hasn't set up your CheckRide program correctly.

Temporary solution: click Disconnect, ask your helper what to enter in the
Helper server name and
Helper server port fields.
Then press connect.

Permanent solution: let your helper create your own Checkride.conf (see section "5. CheckRide.conf").

2. What is it?
This program allows a person requesting help to let a helper take over her desktop remotely.

It is inspired by earlier scripts (e.g. http://www.runpcrun.com/create_your_own_support_software) that set up a reverse VNC connections, and its name is influenced by Fog Creek's CoPilot.
CheckRide allows remote support without hassle: the helped person just runs the program and waits for the helper to take over.
It sets up an SSL encrypted tunnel and shares the helped person's desktop using VNC to a helper that has a server port open and the helper program listening.
The program for the helped person uses a default address and port to connect to to simplify things.

3. How to use CheckRide.exe
Start CheckRide.exe. The program will automatically try to connect until you click Disconnect or close the program.
When connecting, tray icons (next to the clock) will appear for the UltraVNC program (eye symbol) and stunnel program (a boxy shape).
CheckRide uses UltraVNC to contact your helper using the stunnel program.
The helper should have started their own program to respond to your connection attempts.
When your helper responds by taking over your screen, the UltraVNC (eye) icon will change color from blue to yellow.
When the connetion is lost, e.g. due to network problems, CheckRide will keep on trying to reconnect.
CheckRide stops UltraVNC and stunnel when disconnecting or closing. You will notice the icons disappear.

You should know enough by now about running CheckRide.
Read on if you're a helper interested in using CheckRideHelper, or a developer.

4. CheckRideHelper
CheckRideHelper.exe is the counterpart for CheckRide.exe: you need to start it on the helper side to take over the helped party's screen.
CheckRideHelper, CheckRide and all other required files (including source) can be installed using CheckRideHelperSetup.exe, see
REQUIRED configuration: see next section.

5. Configuration for helper
You need to have either a fixed external IP address or a fixed DNS name (e.g. www.lazarus.freepascal.com).
Most residential dial-up and broadband (ADSL, cable) connections have a dynamic IP address. In this case, get a free dynamic DNS address via e.g. www.dyndns.org, install the dynamic DNS client and use the host address (e.g. example.dyndns.org) as your hostname when compiling the program.
In your router/modem, forward the relevant port (the one specified as HelperPort in the CheckRide.conf file) to your desktop running CheckRideHelper.exe. See www.portforward.com for further details on port forwarding.

To adjust the host/server name and port Checkride connects to, there are multiple options. The first option is the most elegant and easy for end users:
1. Use CheckRideHelper to modify CheckRide.exe settings: using the Tools...Customize Checkride menu, edit settings.
2. distribute CheckRide.conf with your own settings. These overrule the built-in settings (see below)
3. use command line options to overrule built-in settings and CheckRide.conf, see section below.
4. specify server name and port manually in the CheckRide form (useful for one-off operations).

6. CheckRide.conf
If you place a file CheckRide.conf in the CheckRide application directory, you override the built-in configuration and can specify where the app will connect to.

CheckRideHelper uses CheckRide.conf to determine what port to listen to.

CheckRide.conf should contain something like:
; Default helper entry
... where you can customise the HelperHost, HelperPort and HelperName entries.
The host is the host (name or IP address) of the helper's machine.
The port is the TCP port where the helper's CheckRide server listens on.
Obviously, CheckRide.conf contents (at least the port number) need to match both on helper and helped party.

7. Checkride.exe command line switches
You can overrule the embedded configuration and CheckRide.conf by using command line options. Please use ChecKride -h and CheckRideHelper -h for details.
Some options for CheckRide:
--helperhost <name_or_ip>    : helper host address/IP number
--helperport <portnumber>    : helper port
--helpername <name>          : name to display
--noautoconnect              : don't automatically connect to helper on program startup
--help                       : show command line options

8. CheckRideHelper use
Configuration: see above. 
On start, unless you specify -noautoconnect as a parameter, UltraVNC and stunnel tray icons should appear.
Note: -noautoconnect also works for CheckRide.exe
If you want to change the port on which you can be reached by CheckRide, change the port number in the edit box, press Disconnect and Listen.
You can find out your external IP address by clicking the What is my IP? button. Handy if you want to pass this on to a helped person.

9. Compilation
9.1 Prerequisites
If you want to compile the programs yourself you will need:
Lazarus IDE+FreePascal compiler from www.lazarus.freepascal.org
If you want to modify the installer (CheckRideHelperSetup.iss), you'll need:
Inno Setup (QuickStart Pack recommended): http://www.jrsoftware.org/isdl.php#qsp

Get the source code either:
- with the installer (CheckRideHelperSetup), 
- from the repository at https://bitbucket.org/reiniero/checkride/src

9.2 CheckRide & CheckRideHelper
Edit CheckRide.conf, specifying your own server name and port, and helper name.

When compiling, the Lazarus project executes a program, CheckRideResourceZipper.exe.
This program generates a zip file from CheckRide.conf and the other required executables and files, then adds this zip file to CheckRide.exe.
See the settings in Lazarus, Project, Project Options, Compiler Options, Compilation, Execute after (call on compile, build, run).
If you want to change the files incorporated in CheckRide.exe, modify CheckRideResourceZipper.lpr, recompile it, then build (not compile) CheckRide & CheckRideHelper.

To use your own version of CheckRideHelper, put these files in a directory:
readme.txt (this file)

10. What does this tool use?
The CheckRide and CheckRideHelper programs are wrappers for:
- UltraVNC
- Stunnel
Please see the file License.txt for information on what they are, where to get them and their licenses.

11. License
The CheckRide, CheckRideHelper source code/programs are released as freeware under the MIT license: all use permitted but no liability accepted:

Copyright (C) 2011-2012 by Reinier Olislagers

CheckRide and CheckRideHelper make use of some other programs/components.
Please see the file License.txt for the exact license.

12. Bugs & improvement ideas
12.1 Contributions
I'd be happy to receive bug reports and patches/ideas for improvement via the project's issue tracker:

12.2 Ideas
These may be acted on, or they may not ;)
- look into installing/using temporary video driver service
- test with existing vnc services
- use stringgrid instead of memo for log output
- nslookup first to get host info
- ping first to get idea of whether host is up (run ping in process, pipe result to screen on linux; run indy or whatever ping on windows)
- replace stunnel with FPC units (synapse?)
- certs in ssl; create them yourself for added security/authentication
- incorporate audio qemu rfb extension if both ends have CheckRide=>telephony over VNC/voice communication
  see: http://www.tigervnc.com/cgi-bin/rfbproto 
- misuse ultravnc chat or something similar (clipboard info?) for a telnet like interface (probably without admin on UAC systems though)
- move vnc/stunnel handling to classes in separate units for reuse
- pre-VNC chat over SSL -> eg measure bandwidth?