TQSL changes
============

2.0.2
----------
When run in command line "-n" mode (display new program and/or configuration
files), TQSL could exit before the check was completed. Change the behavior
so the program waits for the check to complete.

Signing a log with a location that points to an incomplete certificate
request would cause an "Invalid argument" error rather than the expected
error message notify the user that they have no valid callsign certificates
for that callsign. TQSL now properly displays the error.

Don't display the main TQSL window when requesting the user enter
the password for their callsign certificate when in batch mode.

Add timestamps to diagnostic log entries.

Ensure that station locations added from the "sign a log" selection
dialog are added to the list of station locations.

Allow restore from a .tbk file to restore multiple pending callsign
certificates for a given callsign.

Change message on upload dialog box when a certificate request is being
uploaded to indicate that it's a callsign certificate request, not a
log file being uploaded.

When a renewed callsign certificate is installed, delete any older versions
for that callsign.

Correct defect that could cause errors when using files in directories
containing non-ASCII characters on Windows.

Correctly account for errors when signing a log so that the number of QSOs
processed is displayed correctly. (For some cases where QSOs caused errors
which the user chose to ignore, the number of QSOs processed could show up as
a negative number.)

On Windows, Use OpenSSL 1.0.1g to correct the Heartbleed bug.

Add a newline after "Signing using.." message when signing a log so
any errors show up under that message, not tacked onto the end of it.


2.0.1
----------
Lock the duplicates datbase so only a single TQSL instance can
access it in cases where users have multiple TQSL windows open.

Don't use the Directory chooser widget in the preferences pane for
selecting a backup directory on Linux systems. That widget is
not usable and can crash TQSL. Use a simple text box instead.

Don't prompt the user to renew a callsign certificate that's going to
expire soon if they've already submitted a renewal.

Correct handling of callsign certificates to avoid an "Invalid argument"
loop in some circumstances during update checking. 

Fix crash when the callsign certificate status file is empty or invalid.

Update the messages displayed during callsign certificate creation to
make it more clear when signed requests are appropriate. Warn when
a duplicate certificate request is being created that there are pending
operations and that the user should wait.

when checking for updated versions of TQSL, consider production releases
to be "newer" than beta/alpha test versions.

Correct defect in thread handling that causes hangs on pthread-based
systems.

Change handling of the Pending Callsign Certificate request list to avoid
using a function that misbehaves on some Linux variants.

When a user tries to sign a log using a Station Location that refers to an
invalid Callsign Certificate, refuse the signing operation and let the user
know that the Callsign Certificate is invalid.

For uploaded files, use .tq8 as the extension, not the original .adi/.log to
avoid user confusion.

Remove hang when certain command line strings are empty (-p, for example).

When editing a station location where there the associated callsign
certificate is no longer installed, don't default to the first certificate.
Display an error to properly notify the user.

Correct handling of Station Location names with leading and/or trailing
whitespace. Strip those characters when creating and editing a station
location and ignore them when looking up existing station locations.

Install and use a certificate bundle so TQSL is no longer dependent upon the
host OS for certificate validation. 

On Windows, use OpenSSL for SSL connections rather than the unreliable
Windows SChannel implementation.

Word wrap the "overlapping certificate" message properly.

Fix a crash that occurred when an error was displayed due to the
automatic backup being performed at exit.

Display errors that happen while saving creating callsign certificate
requests more prominently.

When prompting for a password, don't treat an empty password response
as a cancel. Try to use that and report a password error if appropriate.

When reporting errors, don't include the filename of the proximate cause
twice in the same error message.

Don't notify users of pending callsign certificate requests with the "are
you ready to install" prompt. This is confusing as it seems to indicate
that TQSL has the .TQ6 already downloaded and ready to install. Since we
can't tell when LoTW has delivered the e-mail, don't prompt for the TQ6
at every startup.

Use the LoTW certificate status web query to determine if any callsign
certificates are current. Store this information when updates are done
(by default, once daily) and use that to inform users that the
callsign certificate they are using are no longer valid.

Move the update operations performed at startup to a separate thread so
the GUI can initialize while this work is ongoing. This replaces the
2.0 behavior of starting the updates (and blocking the GUI) two seconds
after the GUI appeared. This also corrects a potential deadlock on
OSX where the first-time user message could appear along with an update
dialog, both of which locked each other out.

Correct callsign certificate password handling to use UTF-8 for any
new passwords. On Windows, try UTF-8 then UCS-2 to unlock.

Issue more helpful error messages when errors occur while parsing an
ADIF file, including what field is causing the error.

Correct problem where using characters like "<", ">" or quote in a station
location field could cause restoring a .tbk file to fail with a syntax
error.

Properly handle non-ASCII characters in station location names and in callsign
certificate request name/address fields. Store these in a form that allows
transport between UNIX and Windows.

When asking about how to handle duplicate QSOs, don't count duplicate QSOs and
QSOs with bad callsigns as "new" - ignore them.

When importing certificates, default to .tq6 files.

Force the callsign certificates and station locations pane of the UI to be
fixed size. This fixes long lists of certificates or locations to use a
scrollbar rather than having the pane stretch the whole UI.

2.0
----------
Major feature Additions:

Merge tqslcert into tqsl. Update the UI to be more user friendly.

For the Callsign Certificaates tree display, don't display the
certificate provider list if there's only one provider.

Allow users to back up and restore their TQSL configuration in a portable
file. Automatically back up the configuration to a user-specified directory
(or to a default one) unless this is disabled.

Add diagnostic logging capability. This is used to store a verbose log
from cURL and to write a trace log that can be used by the developers to 
help determine the source of defects.

Display unique icons in the certificate tree to allow expired and superseded
certificates can be distinguished.

Detect and report invalid frequencies in ADIF files (outside of ham bands,
entered in KHz versus MHz.)

Validate the format of Grid Squares when they're entered for a station
location. This also fixes the case to be normal, upper case for the Field,
lower case for the subsquare (FM18ju, for example).

Other changes:

Correct the defect that could cause invalid QSOs (bad call signs, for
example) to result in a cancellation message from an attempt to sign the
log but not provide detail on what QSO failed.

Automatically back up the user's configuration whenever TQSL closes.

Display the versions of the major software packages built into TQSL as part
of the "Help/About" text.

Don't ask the user to choose the file type for certificate load operations,
just provide a file open dialog and allow them to choose.

When issuing a callsign certificate request, default to "signed" unless there
are no usable certificates to be used to sign the request. Add text to the
dialog box explaining when unsigned requests should be used.

Remove the initial "Certificate Providers" page from the certificate
request wizard as it serves no current purpose.

Always display all callsign certificates, including expired and superseded
certficates.

Use consistent terminology throughout - "Callsign Certificate" and "Station
Location".

Replace atoi() calls with strtol() to correct parsing of strings like '012'
so they are not treated as octal.

Enforce frequency entry in the ADIF editor, ensuring that frequencies are 
entered correctly (in MHz) and within an amateur band. Reject frequencies
that are not consistent with the BAND setting.

Correct the exit code for circumstances when -a abort is used and an bad QSO
is detected. Display the error information on that QSO before exiting.

Detect new verions of the TQSL configuration file when performing the
"check for updates" operation (manual or automatic) and allow the user to
update the configuration file if there is a newer one available.

Add new command line options "-b" to select the start date for QSOs to be
signed (begin) and "-e" to select the end date for QSOs to be signed.

Warn users on startup when they have a certificate that's going to expire
soon (in less than 60 days).

Back up certificate details (address, entity) when backing up as .p12 file.

Change title of certificate request window to reflect new or renewed
certificate.

Add the ability to automatically upload a certificate request.

Make the preferences window a top-level window so it doesn't block
activity in the help screen, etc.

Delete obsolete mode maps when signing a log.

When creating a station location, default to the callsign selected on
the locations tree if one is selected.

Add a button to the Log Operations window that opens the Logbook of the
world website.

Add a new command line option, -n, which checks for new versions of critical
TQSL files then exits. This is designed for use by logging programs that
operate TQSL on behalf of the user.

Add network proxy preference settings to allow users to use the TQSL network
based functions on networks that require all traffic to use a proxy.

Grab window focus when prompting for the certificate password to ensure that
the password window appears on top of the calling logger.

Simplify the messages displayed on certificate import (relegate the details
to the diagnostic log).

Detect additional cURL errors and translate them into more user-friendly
text.

Don't use "Private Key" in certificate load error messages - use certificate
request. Provide the callsign associated with certificate loading errors.

Display detailed error on certificate import errors.

Display system error reason when attempts to update the TrustedQSL
configuration file fail.

Track multiple pending certificate requests and warn the user when they try to
ask for a new or renewed certificate for callsigns where requests are already
pending.

Fix pathname separators so Windows always uses "\" for folder/directory names,
not mixed forward and backward slashes.

Add more information to signing progress display including processed, error,
and duplicate counts.

Recover from invalid ADIF files by ignoring invalid data until the next EOR
(end of record) field is seen.

Add working directory string to diagnostic log.

Update documentation to reference differences for Mac OS X menus.

Delete pending log file when signing cancelled.

Fix crash when location entity data is missing.

Display the DXCC entity name in location properties, not the entity number.

Correct Grid Square parsing to allow 'a' and 'z' in subsquare fields.

Update documentation to reference Mac OS X GUI fields and menu layout.

Move Diagnostic Mode menu to File menu - the OS X Help menu doesn't allow
checked items.

Correct other instances of DXCC entity number being used in user messages
to emit entity name, not the number.

Generate an error message on startup when stale mode maps are in place.

Don't allow a user to redefine a standard mode.

When the user chooses to not ignore errors in a log, don't save or 
upload it.

Fix the way user dialog boxes (for things like date range, passwords, and
requests for how to handle errors) get instantiated so that the windows can
appear on top of logging programs using command line log signing.

Attempt to determine the field containing the call-worked data in unknown
Cabrillo contests without requiring the user to define a custom contest.

Update the "Ignore Errors" dialog to have "Ignore" and "Cancel" options
and to describe what each of those does.

Correct batch/quiet mode (-q or -x command line options) to avoid unexpected
windows from popping up before a dialog (password, errors, date range, etc.)

Always print out the TQSL version number at the beginning of output for
command line applications.

Use new application icons contributed by K1GQ.

Correct regression where duplicate QSOs would result in an action prompt
even though "-a abort" was specified on the command line.

Don't display the TQSL version number when "-n" is used on the command line.

Strip leading and trailing spaces from the location name passed on the
command line.

Properly handle and report upload errors displayed by the LoTW website.

Install TQSL icon when "make install" used on Linux.

Make the new icons optional.

Correct the suppression of the TQSL version number when "-n" is used
on the commmand line.

Report errors when critical files cannot be opened (station data,
certificates, etc.)

Correct the behavior when the user selects a callsign or a location in the
station location pane then clicks "Create new station location". The callsign
selected was used in the location setup, but the DXCC entity was not properly
selected.

Only display the DXCC entity once in the station location page. This fixes
the display when there are multiple callsign certificates for a given callsign
(one valid and one expired, for example). This defect would cause TQSL to show
a pulldown menu with multiple copies of the same entity name.

Suppress warning messages when the user has no locations defined or callsign
certificates installed as this is normal for an initial setup.

When "Sign and Save" or "Sign and Upload" are used, first check if the user
has any callsign certificates installed. The former behavior would ask for
the input and output files, then try to select a station location. Since
there are none, offering to create a station location would then fail.

Trim extra spaces from station location fields. These could cause
signing to fail as LoTW was removing these but TQSL was not.

Update TQSL to provide the current LoTW configuration file (v2.5)

Correct error messages on version update website failures, so that it's
clear that it was the check that failed, not the download. Increase the
version check timeout slightly to limit premature check failures.

When performing the automatic update check at startup, wait for the main GUI
window to appear. Provide a status message in the window until the update
check completes. This keeps TQSL from appearing to hang at startup if the
update check is slow.

Correct command line behavior to not pop up a window when invoked then
close that window. Fix duplicate handling error introduced at RC6.

1.14.3
------
On Windows, use a newer verions of libcurl that doesn't suffer from the defect
fixed by http://support.microsoft.com/kb/975858. This defect causes an error
message "schannel: failed to setup extended errors".

On all platforms: show some additional libraries' versions in the about screen

Correct a defect when tqsl is used as a command line tool to sign a user's log
for their logging program. If while signing that log, tqsl detected that a
newer version of tqsl was available, it would exit without signing or
uploading those QSOs.

1.14.2
------
Fixed an error when the TrustedQSL directory had Unicode characters, don't
prompt for updates when called silently, fail properly when the user chooses
to not ignore signing errors

1.14.1
------
Minor bug fixes to internet functions and the command line parser, hang fixed
on OSX, removed unnecessary field from upload

1.14
----
Major feature additions:

 - Upload log files directly from TrustedQSL! Simply choose "sign and upload"
   from the File menu and your log will signed and uploaded automatically with
   no extra work.

 - Command line flag '-u' has been added to expose this functionality to
   tools authors.
 - The return value from tqsl can be used to determine whether the signing
   or upload succeeded or failed, and why

          0=success; log signed and uploaded and accepted without incident
          1=Cancelled by user
          2=The log was rejected by the LoTW server
          3=The response from the LoTW server was unexpected or unrecognized
          4=An error occurred in tqsl
          5=An error occurred in tqsllib (probably a bad filename)
          6=Unable to open input file
          7=Unable to open output file
          8=All QSOs were duplicate or out of date range (no QSOs written)
          9=Some QSOs were duplicate or out of date range (some QSOs written)
          10=Command syntax error
          11=LoTW network connection failed (no network or LoTW is unreachable)

   The exit status is also written to Standard Error (stderr) in an easily
   recognized format.

 - Automatically check for updates. If a new version is available, you will be
   periodically prompted to download and install it. You can also check manually

 - Duplicate checking. Any QSOs that have been successfully uploaded to Logbook
   of the World or saved to a file are registered in a database. Any exact
   duplicates are automatically stripped from future logs. This can be disabled
   on a case-by-case basis, in case a log was signed but never uploaded, or
   there was a server issue that led to an upload going unprocessed.

 - TQSL will now ensure that the CQ and ITU zones, and subdivisions if any
   (US state/county, Canadian province, Russian oblast) are valid with respect
   to each other. This should reduce the incidence of swapped CQ/ITU zones and
   in general should help ensure that more accurate location data is uploaded.
   When an attempt is made to use a location with errors (such as CQ/ITU
   zones being reversed) the user is notified to correct the errors.

 - Installer on Windows is now a Microsoft Windows Installer package, instead of
   an executable. This will allow for easier and cleaner upgrades

 - Added a new command line option, '-a', to allow command line users to
   control user interaction. This option takes a value from the set ask,
   abort, compliant, or all. For '-a ask', TQSL will ask users how to handle
   duplicates and date mismatches. '-a abort' will cause signing to terminate
   immediately when an error occurs. '-a compliant' will cause only correct
   (new or in date range) records to be output, and '-a all' will cause all
   of the input records (including duplicates) to be signed. Prompts for errors
   (date ranges bad, bad callsigns) will be suppressed for '-a compliant'
   or '-a all', but cause immediate aborts when '-a abort' is used. '-a ask'
   prompts the user in those cases.

Minor changes:

 - TQSL/TQSLCERT now have window icons

 - Double-clicking an entry in the "Choose station location" window for signing
   now selects it, instead of opening it for editing

 - Command line parsing has been rewritten and should be more robust. Also,
   command-line documentation is available with '-h'

 - Files to sign and save are now prompted before location and date range

 - The build number is now shown in the About box; please include this when
   asking for help

 - The final confirmation before signing includes the signing station location

 - Output files on Unix systems are provided with a default .tq8 extension

 - The "Edit station location" window title now contains the callsign and
   station location name

 - Station locations can no longer be defined using expired or superceded
   certificates

 - Users are no longer prompted for a password while importing a .p12 file
   unless the file has a password set

 - When importing a certificate, detailed information is provided on the
   progress of the operation as well as the reason for any errors

 - Dozens of bug fixes and potential or real crashes fixed.

TQSL/TQSLCERT and the rest of TrustedQSL now built with the CMake build system

TQSL/TQSLCERT are now built with MSVC on Windows.

** Windows 98 support has been dropped. This will be one of the last releases
to support Windows 2000.

** This will be one of the last releases to support OS X on PowerPC systems.

1.13
----
No functional changes. Update to sync to updated tqsllib; updated build tools.

1.12
----
When asking for the password to unlock a private key, say what callsign it's
for.

Remember certificate requests and assist the user with importing the .tq6.

Prompt user to save their certificate after importing a .tq6 signed certificate.

Suppress display of superseded certificates, controlled by a tqslcert
preference setting.

Fix windows wxWidgets crashes with several wizards (cert renew, new cert,
etc.)

Add checkbox to allow bypassing state selection.

Fix crash on Windows when new certificate request wizard is started.

Added support for validating zone numbers and requiring them.

Allowed batch mode (-x) without displaying windows

When double-clicking an entry on the "Edit Station Locations" dialog, open
that entry for edit, don't just close the modal dialog.

Change the "OK" button on the "Edit Station Locations" dialog to "Close"
as that's what it does.

Update password dialogs to enable "enter" to activate when possible.

Add "-p <password>" and "-o <output-file>" arguments to tqsl.


1.11
----
Added command-line option -d. (See on-line help for details.)

Modified string handling to be compatible with Unicode versions
of wxWindows/wxWidgets.

Certificate request wizard now checks for date overlap of request with
existing certificates. This allows non-overlapping requests to be
generated. (TQSLCERT)

Help-contents file tags now contain "type" parameter so that
packages built with wxWindows >= 2.4 will show the help
contents properly.

1.10
----
Added command-line parameters and help page for same. (TQSL)

Windows build now links the expat library statically, eliminating the
need for libexpat.dll. (TQSL/TQSLCERT)

1.09
----
ADIF editor now handles seconds in the TIME_ON field. (TQSL)

User now gets chance to re-enter failed password during signing.
(TQSL)

Expanded explanation of QSO date-range dialog during signing. (TQSL)

After loading new configuration data, DXCC list in CRQ wizard was hosed.
(TQSLCERT)

1.08
----
Added start-up warning if beta-test certificates are present.
(TQSLCERT)

Added version ident to outgoing .tq8 file. (TQSL)

Added display of certificate info to getPassword dialog. (TQSL)

1.07
----
Fixed GetPassword bug that kept the password from being accepted
when trying to unlock the key during Certificate/Save. (TQSLCERT)

1.06
----
Added support for new QSO data fields (propagation, satellite,
rx band and rx freq. (TQSL)

Added support for DXCC=NONE. (TQSLCERT)

1.05
----
Now using TQSLLIB V1.2

Added QSO Date Range dialog. (TQSL)

1.04
----
"Delete" button in Preferences/ADIF_Modes wasn't getting
enabled (Windows only). (TQSL)

Assertion error when adding Cabrillo mode to empty list
in Preferences/Cabrillo_Specs (Windows only). (TQSL)

Completed help files.

1.03
----
Changed File menu items to be more descriptive (TQSL)

Added optional call-sign format checking during signing. (TQSL)

Added user-editable table of Cabrillo CONTEST
specifications. (TQSL)

Improved error reporting during log signing. (TQSL)

Errors in log caused signing to be noncancellable. (TQSL)

After signing error, same output file couldn't be reused. (TQSL)

Added user data pointer to tqsllib callback functions. (TQSLLIB)

Added PKCS#12 import and export. (TQSLLIB)

Refactored wizard code for more consistent display. (TQSLCERT/TQSL)

Added Certificate/Save and Certificate/Delete and added PKCS#12
support to File/Load_Certificate_File. (TQSLCERT)

Added broken-certificate indicator to certificate list. (TQSLCERT)

Improved error trapping and reporting in certificate-request
wizard (TQSLCERT)

1.02
----
TQSL now gives the user the option of ignoring errors that occur during
signing. Errors are still reported, however.

Fixed ADIF parser zero-length-field problem. (TQSLLIB)

Fixed certificate request wizard State field focus problem. (TQSLCERT)

Added "Edit Locations" command to Station menu. (TQSL)

Fixed mishandling of ITU zone and CQ zone data in station location. (TQSLLIB)

Improved MODE handling in both TQSL and TQSLLIB. There is now a table of
mode aliases that can be added to by the user, allowing the user to map
nonstandard ADIF MODE values to ones acceptable to TQSL. This is applied
both during File/Sign and File/Open operations.

Fixed Cabrillo converter typo in ARRL-VHF-JAN contest. (TQSLLIB)

1.01
----
Fixed error-return value when certificate not found during signing. (TQSLLIB)

Fixed certificate selection criteria during signing and add station location.
(Was allowing use of certificates not yet loaded.)

Added ADIF frequency-to-band conversion. (TQSLLIB)
