Changes
=======
(The Initials are explained at the end of the text)

Before you copy this Hamster version to an older (<2.1.0.11)
installation do an update to the last Stable 2.1.0.11 and test
if it runs without errors.

V2.1.0.1548 (nightly snapshot {AP2})
- [NNTP - Server]
   - Bugfix: [XHDR] If the parameter is missing, the Hamster sends
             response 501 instead of terminating the connection.
V2.1.0.1547 (nightly snapshot {AP2})
- NNTP - Server]
   - Bugfix: "AUTHINFO *" response codes corrected according to RFC 4643
             Response code for "Overload" changed from 502 to 400
   - Bugfix: [XHDR] For articles without the header the hamster doesn't return
      a '(none)' any more.
   - Bugfix: [XHDR] unfolds header if necessary.
- News/Mail preview:
    HTTPS links are now recognized and offered as such.
V2.1.0.1543 - 1546 (nightly snapshot)
- Changes: [Help] {HR}
   Change of the help system to CHM format. The CHM help file is only
   available in german language for now.
V2.1.0.1542 (nightly snapshot {AP2})
- Bugfix account overview (Local Server->News/Mail directories)
   Possibly entries were missing if the header of an article exceeded the
   length of 80 lines. Now the complete header is always read.
- Status line/Icon hint text
   A new text variable can be used in the status message:
   %CT 'Custom Text' Displays a custom text. This can be set via
         hs2 function setXText( <text> ) to be changed.
- HS2] - new script function
   setXBottomlineFormat( <string> )
     Sets the format string from which the status line in the Hamster main
     window is generated. For format see: Help Hamster.ini BottomlineFormat.
     An empty text reloads the default value.
   setXHintFormat( <String> )
     Sets the format string from which the hint text is generated by the
     hamster icon. For format see: Help Hamster.ini HintFormat.
     An empty text reloads the default value.
   <String> setXText( <String> )
     Sets a text to be displayed in the status line / icon hint text in the
     hamster displayed in the %CT variable. Return value is the previous
     text. With an empty text the value can be deleted.
   <headerSize> ArtLoadHeader( <msg>, <filename> )
     Loads the header of an email from the text file <filename> into a
     message buffer <msg> previously created by ArtAlloc.
     Return value: >=0 OK (= header size in bytes)
                   -1 = file not found, -2 = error
- [HS2] - changes
   <String> ClipRead( [<encoding>] ) / ClipWrite( <String>, [<encoding>] )
     The functions have been given an optional parameter <encoding>,
     which specifies the encoding of the text to be read/saved:
     0 (default) : Local 8-bit character set
     1 : UTF-8   2 : UTF-16LE (WideString)
V2.1.0.1541 (nightly snapshot {AP2})
- Changes: Log:
   Additional log messages if errors occur when accessing the language file.
V2.1.0.1540 (nightly snapshot {AP2})
- Changes: [NNTP]
   Reloading articles via MID: The process is not interrupted anymore,
   if an article is not delivered because of missing rights (502).
- Changes: [POP3 client] {AP2}
   If the UIDL of the external server is known when retrieving an e-mail,
   it is now stored in the optional 'Received' header in its 'ID' field.
- HS2]
   - New: UTF8Delete( <UTF8-String>, <nStart>, <nNumber> ) {AP2}
      Returns a copy of <UTF8-String>, but where starting from.
      characters <nStart>, up to <nNumber> characters have been deleted.
      The UTF8 encoding is respected.
- Bugfix: [Mailhistory][POP3 client] {AP2}
   Although the user has confirmed changes to the mail killfile, they
   were not saved immediately (MHistory.dat). If the window remained
   open, the entries could be lost due to a crash.

V2.1.0.1519 (nightly snapshot {AP2})

- new: [IMAP]
   The IMAP-command EXAMINE could be disabled. To do this set in Hamster.ini
   [Setup] local.imap.disable.EXAMINE=1
   {AP2}

V2.1.0.1517 (nightly snapshot {AP2})

- new: [account] A local User can now receive all E-Mails directed to a
   specific Domain ('Catch-All'). To do so a '@' followed by that Domain
   (FQDN) must be addressed to the account (e.g.: '@example.com') instead
   an E-Mail Address. {AP2}
   Hint: Alias-Rules have still a higher priority.
   Hint: An E-Mail ist still directed to that account with the first match
         of the E-Mail address.
- changes: [IMAP] The IMAP copy command and index creation was made faster
     through delayed saving of the index file. {AP2}
- [GUI]
   - Bugfix: "News-Configuration - Reset group" has removed aricles from
     history but not from Datafile if "Keep Days" was set to 0 {AP2}
   - News/Mail-preview: Couldn't move an E-Mail to a different folder (Trash)
     if the target folder alrady contained an E-Mail with that name. {AP2}
- [Actions] Bugfix: "Wait for end of program" doesn't work with
   console programs (like: Only_KN.exe) {AP2}
- [Performance] Because of an unnecessary call to a debug function there
   was a performance regression during saving of articles {AP2}
- [NNTP-Client]
   - New: Workaround (2 retries) for server with a delay after XOVER befor
     they prowide an article.
   - Bugfix: articles with only one body line were not saved (AP2)
   - Bugfix: news.in.nntp action aren't called for articles loaded because
      of GetMids.txt {AP2}
   - Bugfix: PATH-Header wasn't changed (though intended) if the articles
      was loaded because of GetMids.txt {AP2}
- [NNTP - Server]
   - New: XOVER result is now enhanceable {TGL/RW}
        ({AP2} - LIST OVERVIEW.FMT response enhanced)
     Hamster.ini: [Setup]
     local.nntp.XOVERExtraFields= Header1, Header2
   - New: "AUTHINFO SIMPLE" {RFC2980 & INN-Variante} is accepted.{AP2}
   - New: "CAPABILITY" {RFC3977} is now implemented.{AP2}
   - Bugfix: Using SSL the account "nntpdefault" was not active.{AP2}
   - Bugfix: "LIST"/"LIST ACTIVE" didn't handle the individual
             rights (ro/rw) of the user. {AP2}
   - Bugfix: "LIST"/"LIST ACTIVE" didn't handle local.List.require.auth=0,
             it returned an empty list instead. {AP2}
   - Bugfix: Set 'local.news.xpatDecodeHeaderBeforeSearch=1' for decoding
             the headers (in xpat). {AP2}
- New: [SMTP/NNTP-Client] In case Hamster sends data line by line, they will
     be collected and send at once:
    Hamster.ini (default=10 Lines / off=0) {AP2}
    [Setup]
    nntp.client.collect.sendlines=10
    smtp.client.collect.sendlines=10
- New: [SMTP/NNTP-Client] Wait for <msec> (default=100) at failed 
    try to send. {AP2}
    Hamster.ini:  [Setup]
    extern.timewait.sendfails=100
- New: [NNTP/SMTP/POP3/IMAP-Server]  In case Hamster sends data line by line,
       they will be collected and send at once. Hamster.ini:
    [Setup]
    nntp.server.collect.sendlines=10
    (dito smtp. / pop3. / imap.)
- Change: [RegEx-Engine]
   - Upgrade to version 7.9 (see PCRE_LICENCE.txt / <http://www.pcre.org/>)
- New/Change: (Filter) Auxiliary fields ('@') could never be decoded for
   mails and for news only if the main field was decoded. Now you can do
   this by adding the tilde ('~') in front of the auxiliary field. {AP2}
    Syntax-Overview MailFilter:
     MAuxfield        =  [ "+" / "-" ] "@" [ "~" ] MOnefield ":" Pattern
    Syntax-Overview NewsFilter:
     ScorePattern     = ["+"/"-"] [ "@" [ "~" ] ScoreField ":" ] 
                                                           Searchpattern
- New: (MailFilter) new filter functions: {AP2}
  - appendheader(<headername>:<Text>) adds the <text> to the header.
- New: (MailFilter) at filter functions having parameters, this can be set
   as an "named subpattern" of a regular expression. {AP2}
   Ex.: add(IMAPbox/<localpart>) to:{<(?P<localpart>\S+)@example.com>}
    Saves an E-Mail to <joedoe@example.com> (TO-Header) in the folder
    "joedoe" in the IMAP account "IMAPbox".
    Warning: There is no (semantical) validity check! {AP2}
- [HS2]
   - new script functions {AP2}:
    <string> HamMainWindowGetLog( nTab [, logID] )
      Returns the (filtered) content of the hamster Log window.
       nTab = 0: Thread-Tab   / nTab = 1: Job-Tab / nTab = 2: Protocol-Tab
       nTab = 3: Warn/Err-Tab / nTab = 4: Protocol-Tab One-Thread
      At nTab 2-4 you can filter on IDs with logID,
       LOGID_ERROR = 0x8000; / LOGID_WARN  = 0x4000; / LOGID_SYSTEM= 0x0800;
       LOGID_USER3 = 0x0400; / LOGID_USER2 = 0x0200; / LOGID_USER1 = 0x0100;
       LOGID_INFO  = 0x0080; / LOGID_DETAIL= 0x0040; / LOGID_DEBUG = 0x0008;
       LOGID_STATUS = 0x0004;
      You can add the numbers for filtering on more than one ID. If it is
      missing completely, all IDs are returned.
    <utf8string> DecodeToUTF8(Text, charset)
      Decodes and returns the <text> from <charset> to UTF8.
    <utf8string> DecodeMimeHeaderToUTF8(Text [, charset])
      Returns the decoded version of an MIME base64 or quoted printable
      coded string. The variable <charset> returns the charset the text
      was coded.
      The return value is coded in UTF-8.
    <ucs-2string>UTF7toUCS2(utf7string)/<ucs-4string>UTF8toUCS4(utf8string)
      Decodes UTF-7/UTF-8 strings into 2-byte / 4-byte WideString.
    <string> charsetconvert( Text,  charsetFrom,  charsetTo)
      Changes the coding from <charsetFrom> into <charsetTo>.
      Default value is the standard charset.
   - Change: UTF-7 (De-)coding:
      UTF-7 exceptions (see RFC2152) are now recognized. {AP2}
   - Change: DecodeToLocalCharset(Text, charset)
      Now this function can handle UCS-2/UCS-4 strings as well. {AP2}
   - Change: encodeBase64( <string>, <forHeader> ) {AP2}
      If the optional parameter <forHeader> (default = 0) is set to "1", some
      additional chars will be encoded (' '->'_').
   - HamFetchMail, HamSendMail und HamSendMailAuth
      - Change: The default value of parameters <SSLMode>, <SSLVerify> 
        and <SSLCaFile> are now read from the Server.ini (if available).
        {AP2}
      - New: By the parameter <SSLMode> you can set the SSL-Type.
        For this the current <SSLMode> increments by the following values:
      0 (= default)   : Auto-Mode (as currently!)
      0x100 (= 1*256) : enforce SSL-Type version SSL3
      0x200 (= 2*256) : enforce SSL-Type version TLS1.0
   - Bugfix: DLLCall() {AP2}
      - Calling functions with multiple parameters and without return value
        ('void' functions) was not possible.
      - The error state for the function DLLLastError() was not 
        set correctly.
      - Robustness: If you gave the wrong count of parameters, there could
        be errors in the program flow.
   - Bugfix: getEnvironment() throwed an exception, if the variable
      didn't exsist. {AP2}
   - HamScoreTest() {AP2}
      - Bugfix: On <scope>=0 the parameter <matchlog> provided an incomplete
          returnvalue. {AP2}
- [HS2/OLE]
   - Bugfix: HamChangePassword/ControlChangePassword were of no use for a new
     user. {AP2}
   - Change: HamScoreTest( <scope> = 0 ) {AP2} / NewsScoreTest() {HR}
      The Result of these functions is now equal to the real Scoring.
      That means, the After-Load-Score is only added if the Overview-Score
      is greater or equal to 0.
   - Bugfix: HamScoreTest() / NewsScoreTest() {AP2}
     The returnvalue of <matchlog> had in some cases an additional empty line.
- Change: (internal)
      - The message about caching of the translation table has been moved
         from log level "System" to "Debug". {HR/WJ}
      - The message about a missing translation table file has been moved
        from log level "System" to "Warning".
        With the option [Setup] Ignore.Missing.Translationtables this warning
        could be prevented for selected character encodings. {HR/AP2}
        default: Ignore.Missing.Translationtables=ASCII,US-ASCII
        GUI: General settings; Misc;
             "Don't warn on missing Codepagetables:"
- Change: Main window: {AP2}
   - The Option (Hamster.ini [main] ColoredTabs) got a new thing:
     ('2' = 'Colorless (simple view)').
     GUI: General settings; Visual; Drawing of Tabheaders
     This option corrects the error in view in Windows Vista/Windows 7!
   - HS2-Shell: Fixed the width of the labels to the width of text. {AP2}
   - Fixed the view error on changed line height in the loglist in the
     main window. {AP2}
   - (Internal): Thread-safety of counter variables. {AP2}
- Change: [Client]
   now you can set the SSL-types in the server.ini.
      [POP3]/[SMTP]/[NNTP], SSLMethod: {AP2}
      SSLMethod=0  - (= default) Auto-Mode (as it is currently!)
      SSLMethod=1  - force SSL-type version SSL3
      SSLMethod=2  - force SSL-type version TLS1.0
   (GUI: Serverproperties; SSL-Properties; SSL-Method) (?)
- Change: [Server]
   now you can set the SSL-types in the Hamster.ini. {AP2}
    [Setup] 
    local.NNTP.Server.SSLMethod=<method>
    local.POP3.Server.SSLMethod=<method>
    local.IMAP.Server.SSLMethod=<method>
    local.SMTP.Server.SSLMethod=<method>
   <method> can be one of the following values
      0  - (= default) Auto-Mode (as it was till now!)
      1  - force SSL-type version SSL3
      2  - force SSL-type version TLS1.0
   (GUI: Local servers; <Protocol>; SSL-Properties; SSL-Method) (?)
- Change: [Server]
   Limiting the amount of data sent in one go. The default is changed to 0
   (=no limit). {AP2}
    Hamster.ini [Setup] local.limit.bytessend=1024
- Change: [IMAP - filters]
   - Target folders of a filter rule is created automatical.
     If you set Hamster.ini [Setup]  IMAP.ForceFolders=0
     you can set the old behaviour. {AP2}
   - An IMAP account can get more copies of the same mail, if you 'ADD' 
     to different folders. {AP2}
   - The 'DEL'-filter removes only that copy with the correct target folder.
     The pseudo-folder '/*' deletes all incarnations on this account. {AP2}
- Bugfix: [POP3-Client]
   - With the usage of the mail filter 'Log()' the deactivation of
     "Ignore already loaded mails, do not load again" 'mail.filterbyuidl'
     did not have any effect. {AP2}
   - If you had more than one account on the same server, the mails were
     handled as they were on one server. If the server did give the same UIDL
     to the mails, one could not be downloaded, as they were already in the
     history.
     New: After setting [Setup] mail.historywithalias=1 the history treat
          the same server with different aliases to be different.
          E.g. "pop3.server.example" -> "pop3.server.example/1"
          The history of non-aliased server won't be changed.
          Attention: After the change the mails which were not deleted 
                     on the server will be pulled again as they seem to
                     be "new" again!
- Bugfix: [ServerBase;GUI] At the shut down of an server there could be a
   dead-lock. Hamster's GUI was frozen afterwards. {AP2}
- Bugfix: Preview of articles: Articles with bad characters could cause
   errors in the view. {AP2}
- Misc changes for the compatibility of divers Delphi versions. {AP2}
   
V2.1.0.15 (enhanced {AP2})
- Change: [Log] With a new version (Hamster) the user-loglevel will activated
    once automaticaly. {AP2}
- Bugfix: [RAS] At connecting/disconnecting by hamster (ras*) the script
     could stop because of an error. {AP2}
- Bugfix: [IMAP] The status wether the INBOX is subscribed was not returned
    correct (on 'LSUB'). {AP2}

V2.1.0.14 (enhanced {AP2})
- Bugfix: [SMTP] Hamster generated the wrong order of "!RCPT TO" and
   "!MAIL FROM" headers.
- Change: TestCase: [Log] ('WMPowerbroadcast')
   'PBT_APMPOWERSTATUSCHANGE' is now excluded from the log.

V2.1.0.13 (enhanced {AP2})
- New: Optionaly hamster can generate the Cancel-Lock/-Key. You can activate
   it by "Local servers"->"NNTP"->"Adjust headers" (MID ist necessary) {AP2}
   http://tools.ietf.org/html/draft-ietf-usefor-cancel-lock-01/
- New: 3 new (User-)Loglevel (ID: 8,9 & 10). The output of the script
   function "print" is set to level 8. The others can be reached by
   AddLog(<text>, <ID>). Through set Hamster.ini/[Main]/color.user1.text ...
   color.user3.brush individualized coloring of script output
   is possible. {AP2}
- New: (MailFilter) new filter functions: {AP2}
  - addheader(<header-name>: <text>) adds an additional header.
  - clearheader(<header-name>: )     removes *all* <header-name> headers
  - setheader(<header-name>: <text>) = clearheader + addheader
- [HS2] new script funftions:
  - Change: digest( <typ> , <string> , <form> )
     <form> 3 = String content coded in Base64.
  - New: encodeBase64( <string> )
  - New: encodeQP( <string> )
  - New: cancel_key( Secret, MessageID )
  - New: cancel_lock( Secret, MessageID )
  - New: cancel_verify( cancelKey, cancelLock )
- Change: (internal) For increasing of performance, the handling of articles
   was simplified. {AP2}
- Change: [IMAP](internal) For increasing of performance, articles are parsed
   only if this is really necessary. {AP2}
- Change: Preview of articles {AP2}
   - The automatical decoding of 'quoted-printable' is now optionalised
     (by menu). Additionally 'base64' is supported.
   - New: "View"->"decodeHeader" decodes the headers for the
     marked text / viewed headers.
- Change: E-Mail-filter:
   Notification-E-Mail 'KILL'/'IGNORE': If usefull, the decoded headers are
   additionally quoted. {AP2}
- Bugfix: Error in E-Mail address cognition (->'dummy') {HR}
- Bugfix: [score-file] Incorrect numerical filter generated an unhandled
   Exceptions. {HR}
- Bugfix: [NNTP] Articles, whose Message-ID header had additional
   whitespaces were incorect added to the history. {AP2}
- Bugfix: Open connections during the shut down of Hamster caused an exception
   and could prevent saving of the settings. {AP2}
- Charset-converting / 'cnv'-files {AP2}
  -Bugfix: Incorrect lines in the 'cnv'-files were not identified.
  -Change: Chars <128 (US-ASCII) will not be read, as they are identical 
     for all charsets. Old 'cnv'-files stay compatible.
- [NNTP]"XPAT" {AP2}
  - Bugfix: A "character-set" matched allways on ']'.
  - New: Hamster.ini [Setup] new switches:
    'local.news.xpatDecodeHeaderBeforeSearch=1' decodes the header before
        they searched throu.
    'local.news.xpatUtf8DecodeSearchstringBeforeSearch=1' removes the
        'utf-8' encoding of XPAT search string.
- Bugfix: [IMAP] At parallel access of an IMAP mailbox by HamsterPop3Client
   and HamsterIMAPServer sometimes wrong 'RECENT'-messages were sent. {AP2}
- Bugfix: [IMAP] After a failed rename of a mailbox it still was
     locked. {AP2}
- Bugfix: [SSL local] Hamster offered a feature (SSL-Session-Cache), whitch
   isn't supported. {AP2}
- Bugfix: [NNTP] If an article could not be saved because of full HD or too
   big databse (2GB) it was saved in the history anyway. {AP2}
- TestCase: [Log] Hamster now logs the OS-messages ('WMPowerbroadcast') of
   changes in power-status.  (Standby/Suspend-to-disc).


Explanation of Initials:
~~~~~~~~~~~~~~~~~~~~~~~~
AH  = Andreas Heim
AP1 = Alexander Plas
AP2 = Alfred Peters
AS1 = Alessandro Sebastianutti
AS2 = Arne Schloh
GD  = Graham Drabble
GG  = Gerold Görke
GLG = Gildas Le Gouic
GW  = Günter Wukoutz
HB  = Hendrik Brummermann
HR  = Heiko Rost
HS  = Heiko Studt
JH  = Jürgen Haible
JW  = Jörn Weber
MB  = Michal Bartoszkiewicz
MG  = Martin Germann
MR  = Mathias Röllig
MS  = Max Sanzharov
NBS = "NineBerry" Schwarz
OJB = Obbe-Jan Bakker
OZ  = Olivier Zolli
PW  = Philipp Wendler
SS  = Stefan Seth
TGL = Thomas G. Liesner

