Changes from 2.0.1 to 2.0.2 (by cwhuang)
========================================
- show NAT IP in print verbose command
- fix reply of pending ARQs to NATed endpoint
- fix bug on handling Facility
- allow hide DisplayIE and CallingPartyNumberIE
- fix an interoperability bug with old NAT solution
- fix a bug that prefixes is not changed on full RRQ
- support 'H323-GW' prefixes
- fix leaking messages on status port
- fix a security bug OnDRQ
- rewrite Setup.destinationAddress even if no CalledPartyNumber
- fix interoperability problem on CloseLogicalChannel for some bad endpoints
- reload route table on RRJ with reason fullRegistrationRequired

Changes from 2.0.0 to 2.0.1 (by cwhuang)
========================================
- add statistics for nated ep and calls from parent
- avoid looped calls
- add NetworkInterfaces option for OS that don't support GetRouteTable()
- add H.245 Reverting technology(Patent Pending)
- fix H.225.0 procotolID problem
- fix a long existing bug according to Packetizer
  http://www.packetizer.com/in/q14.html
- add TOS flag for RTP/RTCP, thanks to Thomas Jalsovsky
- add Citron NAT technology(Patent Pending)
- allow multiple nated endpoints with the same private IP but
  different public IP register simultaneously
- fix possible race conditions in all STL list::size()
- fix a sigfault when name of parent GK is unresolved
- add 'gk' command to show parent GK
- add AlwaysForwardLRQ option
- don't do round-robin for LRQ and find command
- fix a bug in proxy mode (when there are several session IDs in fast start)
- improve support NATed endpoints
- only include alternateGatekeeper field in GCF/RCF if GRQ/RRQ has supportsAltGK
- add a workaround so OpenH323 clients won't reject our confirm messages
  when use H.235 authenticators
- add UseBroadcastListener option
- fix incorrect bandwidth in answered ARQ as a child GK
- add DisconnectSession command, thanks to Rodrigo Gonzalez
- change debug level of received messages(Q931, H245) to 4,
  only show sent messages if modified
- change RasSvr to RasSrv for consistent
- fix bandwidth problem of the answered ARQ
- add password rule for GkStatus, thanks to Rodrigo Gonzalez
- large fd_set patch
- fix problem of h245socket handling
- fix incorrect lightweight RRQ handling

Changes from 2.0b8 to 2.0.0 (by cwhuang)
========================================
- allow to find by epid or ip address
- improve ProxySocket for thread-safe writing
- improve BRQ handling
- add alternateGKs support for GkClient
- improve alternateGKs support
- sort the AuthRules by priority
- clean up BroadcastListen.cxx and MulticastGRQ.cxx
- fix a serious bug in MulticastGRQ.cxx
- let setting options from status port work
- print version when connect to status port

Changes from 2.0b5 to 2.0b8 (by cwhuang)
========================================
- allow to limit port range
- allow call unregistered endpoints
- add RemoveTrailingChar feature
- show CallerIP for CDR from neighbors
- disconnect all calls on shutdown
- disconnect calls when unregister an endpoint
- accept LRQ from registered endpoints
- add AcceptGatewayPrefixes option
- always rewrite dialedDigits OnARQ
- create symbolic link in /tmp to avoid permission problem
- rewrite GkAuthorize to PrefixAuth module
- accept broadcasting RRQ (workaround for Cisco Call Manager)

Changes from 2.0b4 to 2.0b5 (by cwhuang)
========================================
- add ExternalPasswordAuth module
- accept unregistered call if Q.931 contains CalledPartyNumber
- add IncludeDestinationInfoInLCF option
- allow a second ARQ if srcCallSignalAddress is in SkipForwards
- support forwarding LRQs
- add call duration in seconds, thanks to Rodrigo Gonzalez
- change executable name to gnugk
- add DropCallsByReleaseComplete option
- support NATed endpoints by NATHandler
- add AcceptNeighborsCalls, change the meaning of AcceptUnregisteredCalls

Changes from 2.0b3 to 2.0b4 (by cwhuang)
========================================
- add MySQLAliasAuth module
- add ExtraCriterion to MySQLAuth, remove CheckField
- bandwidth management is disable by default
- remove resourceManager, bandwidth management now in CallTable
- allow set neighbors without prefix, no LRQs will be sent to such neighbors
- send IRQ to an endpoint before expiring it
- only accept unregistered call from neighbors
- in SimplePasswordAuth module, allow expire password cache
- add NeighborPasswordAuth module
- check if LRQs is from IP of my neighbors 
- add dynamic resolving name for neighbors, thanks to Rodrigo Gonzalez
- add GkClient module
- allow remove a key or a section in the config from status thread
- remove isalnum check for aliases, we hope to use unicode. :)
- add total call counting for EndpointRec

Changes from 2.0b2 to 2.0b3 (by cwhuang)
========================================
- add AcceptUnregisteredCalls feature
- fix problem of RouteTable in Linux with alias interfaces
- show endtime in CDR even if call not connected
- in routed mode, reject answered ARQ if no CallRec found
- add detailed explanations of known options
- support proxy for fast start logical channels
- fix GKHome not work for proxy

Changes from 2.0b1 to 2.0b2 (by cwhuang)
========================================
- add proxy for T.120 logical channels
- add proxy for RTP logical channels, add Proxy section

Changes from 1.3 to now (by mmuehlen)
====================================
- added destination analysis module list (gkDestAnalysis.cxx, gkDestAnalysis.h)
  with a similar structure as the authentication module list 
  (can be enabled with compiler option WITH_DEST_ANALYSIS_LIST)
- added base class 'GkLDAP' for LDAP access (gkldap.h gkldap.cxx)
- changed the following section names in ini-file 
  (reason: LDAP is not only used for authentification):
    LDAPAuth::LDAPAttributeNames -> GkLDAP:LDAPAttributeNames
    LDAPAuth::Settings -> GkLDAP::Settings

Changes from 1.3 to 2.0b1 (by cwhuang)
======================================
- redesign routed model, add RoutedMode section
- add H.245 routed support, including early connect
- TimeToLive now can be specified in config file
- improve multi-homed support
- new command unregisterip (jan)
- other minor cleanup

Changes from 1.2 to 1.3 (by mmuehlen)
====================================
- fix a bug in Toolkit::GKName (13.11.01)
- add SrcInfo and GkName to CDR:
    CDR|CallNo|CallId|Duration|Starttime|Endtime|CallerIP|CallerEndId|CalledIP|CalledEndId|DestInfo|
    srcInfo|GkName (13.11.01)
- add SHA1 support for SimplePasswordAuth (14.12.01)
- add LDAPAliasAuth (03.01.02)
- add support for new voip.schema (15.01.02)

Changes from 1.2 to 1.3 (by cwhuang)
====================================
- fix problem for lightweightRRQ without callSignalAddress & rasAddress
- rotate log on SIGHUP signal
- write pid to /var/run/gk.pid (can be specified by --pid option)
- rewrite dialedDigits OnLRQ

Changes from 1.1 to 1.2 (by cwhuang)
====================================
- add MySQLPasswordAuth, need mysql++ to compile it
- show left time of calls in PrintCurrentCalls
- add 'Statistics' command
- Rewrite destinationAddress in H225_Setup_UUIE
- fix a bug in Toolkit::RewritePString
- send DRQ to endpoints when tear down a call, give up send Release Complete
  (in some situation it causes deadlock, very strange!!)
  however, some buggy endpoints would ignore DRQ, sigh...
  only send Release Complete on 'DisconnectCall' command
- fix 'connectionList returned NULL' bug in SignalChannel.cxx
- modify SignalConnection::Send to more thread-safe
- modify OnARQ to fix routed mode problem
- show count of current calls of endpoints in PrintAllRegistrationsVerbose
- add 'Find' and 'FindVerbose' commands
- check endpoint identifier for fullRegistrationRRQ
- fix a (security) bug in lightweightRRQ
- add startup and running time to 'Version' command
- change EndpointRec::m_terminalType to be a pointer to reduce memory
  consumed (sizeof H225_EndpointType = 2552 in x86)
- send Release Complete to endpoints when tear down a call (routed mode)
- disconnect calls of an endpoint on URQ
- add DefaultCallTimeout to remove staled calls
- fix bug in DisconnectAlias
- only use CallId to find CallRec if it presents, this fix a potential
  CRV conflict in ARQ
- re-use endpoint identifier if call signal address found in RemovedList
- send URQ & DRQ from RAS port instead of arbitrary port
- print dialed number, number of calls in PrintCurrentCalls cmd
- print number of endpoints in PrintAllRegistrations cmd
- allow generate NB, UC CDR
- don't let ttl < 60
- only generate CDR for call that originated from my zone and connected
  (must work in routed mode)
- redesign CallRec & CallTable
- extend debug cfg SEC command to retrieve a whole section

Changes from 1.0 to 1.1 (by cwhuang)
====================================
- change neighbors structure
- add class GkAuthInitializer for authenticators initialization
- add authentication modules (gkauth.cxx, gkauth.h)

Changes from 1.0pre9 to 1.0 (by cwhuang)
========================================
- add 'debug printrm' command
- change EndpointRec::Ptr to template

Changes from 1.0pre8 to 1.0pre9 (by cwhuang)
============================================
- Neighbor function based on LRQ/LCF.
  GK would cache the records in a list.
  A command "PrintAllCached" is added to GkStatus.
  
- Add more information in LCF reply, including terminal type, aliases
  and supportedProtocols (if any) so that the neighbors could cache it.

- Re-design EndpointRec & RegistrationTable.
  The output format of "PrintAllRegistrations" is also changed.

- Add permanent endpoints support for endpoints without RAS.

- Add gateway SupportedPrefix support.
  Note the gateway aliases no longer be treated as prefixes.
  If you want an alias to be a prefix, add it to SupportedPrefix
  or config file.

- Replace using directive by using declaration to avoid namespace pollution.

Changes from 0.17 to 1.0pre8
============================
- add destInfo to CallRec and CDR (cwhuang)
- rewrite some codes in OnRRQ to be more clean and compact (cwhuang)
- change H323RasSrv to be a separate thread, do housekeeping in the main thread (cwhuang)
- shutdown handler refine (cwhuang)
- allow aliases begin with '#' (cwhuang)
- don't search endpoint table for an ARQ to an answerCall (cwhuang)
- add registration timeout (cwhuang)
- add mutex to RegistrationTable for thread-safe (cwhuang)
- almost rewrite SoftPBX.cxx (cwhuang)
- add singleton.h, singleton.cxx, change all singleton objects to derive from a
  template singleton base to avoid code duplication and allow a better cleanup
  (cwhuang)
- remove all usages of for_each_with by STL for_each (cwhuang)
- add RegistrationTable::RemovePrefixes(const PString &) (cwhuang)
- add more fields to CDR output, add port number to ACF output (cwhuang)
- rewrite UnixShutdownhandler for graceful shutdown (cwhuang)
- change some members and methods in Toolkit to non-static (cwhuang)
- ensure Toolkit::Config be called after SetConfig
  some order of initialization in gk.cxx changed accordingly (cwhuang)
- fix the reload mechanism, set m_RewriteFastmatch when reload (cwhuang)
- add 'reload' command to status thread and remove 'debug reload' command
  'shutdown' command is also added, but not implemented yet (cwhuang)
- show a copyright notice to be compliant to GPL requirement (cwhuang)

- more documentation
- status thread: changed Disconnect command to DisconnectIp,
  added DisconnectAlias, DisconnectCall, DisconnectEndpoint,
  UnregisterAlias
- better handling of DCF
- better error checking for command arguments via status thread
- dummy implementation for TransferCall and MakeCall (doesn't do anything, yet)
- slightly different handling of SIGHUP
- RewriteE164: multiple comma-separated targets, randomly chosen
- simplified conversion between socket and H225 ip addresses
- first steps to implement H.245-routing (doesn't do anything, yet)
- commands via status thread are case insensitive
- changed command line option -h (home interface) to -i, new option -h (help)
- updated to latest OpenH323 version (pwlib 1.1.32, openh323 1.5.4)
- use callIndentifiers instead of callReferences (the first are globally unique)
- generate CallProceeding messages
- using all aliases of endpoint, not only the first alias
- generate CDRs, signal all ACFs
- check H.225 connections with Q.931 StatusEnquiry heartbeat (optional)
- changed default for RasSrv::RRQAuth back to confirm (so you can use
  the gatekeeper without a config file)
- compile fixes for Visual C++ 6.0

Changes from 0.16 to 0.17
=========================

- fixed crash in status reporting of ACF in routed mode
- fixed bug, where the destCallSignalAdress still pointed to the GK
  after being forwarded in routed mode (prevented routed call from
  OhPhone -> Netmeeting)
- the config file gatekeeper.ini is no longer mandatory; simple
  configurations will work without any config file, but you'll need
  it for more complicated setups

Changes from 0.15 to 0.16
=========================

- small fixes to make the gatekeeper compile under Visual C++ 6.0

Changes from 0.14 to 0.15
=========================

- fixed unsafe cast from H323 alias to PASN_BMPString
  Bacci Emiliano found it

Changes from 0.13 to 0.14
=========================

- major bug-fix for ohphone compatibility
  Christoph Stueckjuergen found it

Changes from 0.12 to 0.13
=========================

- updated to compile with OpenH323 beta 3
- small fix in SignalConnection for Windows NT
  by rama@anwsi.com
- multicast requests are answered to the specified port (not the
  sender port
  by Denver Trouton
- RegistrationTable::FindByPrefix now finds the longest prefix, not
  the first one
  by Michael Rubashenkov
- fix in H323RasSrv::OnLRQ to allow it to work with Cisco gatekeeper
  by Michael Rubashenkov
- fix to allow Netmeeting to call ohphone (the other always way has
  been working)
  by Andreas Hofmeister

Changes from 0.11 to 0.12
=========================

- you must have a config file now to set the various new options
  (eg. gatekeeper.ini in the current directory, or set a path on the
  command line with -c)
- support for failover to other gatekeepers
- RAS messages can be forwarded to other gatekeepers
- TCP parameters can be configured in the config file
- what gateway to use on what E.164 prefix can be specified in the
  config file
- overlapped sending: specify in the config file when to send
  "incompleteAddress" on ARQ and collect more digits
- detailed authentication rules which endpoints may register based on
  their IP numbers
- rule based authentication for usage of the status port
- alias rewriting: the gatekeeper has a list of E.164 aliases
  that are replaced by another E.164 number
- many bug fixes...

- the timeToLive filed in RCF can be set on the command line with -l

- more detailed status messages (see GkStatusMsgFmt.html)
  many patches from Henrik Joerring

Most of the changes in this release are donated by folks at MediaWays
(Markus Storm and Torsten Will).
They sent more stuff than I can mention here.


Changes from 0.10 to 0.11
=========================

- many memory leaks fixed
  by Damian Slee
- LRQ implemented
  patch by Ashley Unitt
- accept LRQ as Multicast, too
- when more bandwidth is requested than available we now grant ACF with
  the bandwidth that's still available
  input from Robert Jongbloed
- more attempts for a clean shutdown handling
- status thread accepts commands now (see gkstatus.txt)
  patch by Ashley Unitt
- more detailed status messages (see GkStatusMsgFmt.html)
  input from Henrik Joerring
- general code fixups
  by nils@shkoo.com


Changes from 0.9 to 0.10
========================

- trace messages now use the Pwlib trace facility (use -t or -tt ... to
  turn them on and -o to write to a file)
  patch from Seungoh Jhung
- support for lightweight registration updates
- on shutdown all registered endpoint receive a UnregistrationRequest
- support for gateways: for gateways we only compare the prefix of
  the E.164 address the gateway registered and assume that the gateway
  provides access to the whole address space (needs testing!)
  input from Frank Breitenbach
- new command line option -h <ip> to specify the ip number the
  gatekeeper binds to. Now you can use IP aliases on Linux and
  start as many gatekeepers as you want.
  input from Markus Storm
- status messages with ip numbers
  input from Seungoh Jhung
- bugfixes
  from many contributors...


Changes from 0.8 to 0.9
=======================

- gatekeeper routed signaling implemented (only H.225; no H.245, yet)
  provided by Sergio Artero Martinez
- Bugfix: RRQ from Innovaphone IP400 now ok
  input by Markus Storm
- gk sends status messages to all clients connected to TCP port 7000
  (eg. for SNMP agent) - this is experimental and may evolve into
  a full-fledged interface to the gatekeeper
- all mandatory RAS messages implemented

