{"id":17855870,"url":"https://github.com/splorp/npds-tracker-server","last_synced_at":"2025-08-21T20:24:56.390Z","repository":{"id":1047573,"uuid":"878927","full_name":"splorp/npds-tracker-server","owner":"splorp","description":"Java based server for tracking Newton Personal Data Sharing clients.","archived":false,"fork":false,"pushed_at":"2022-02-10T21:49:36.000Z","size":187,"stargazers_count":8,"open_issues_count":7,"forks_count":7,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-17T17:05:29.136Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/splorp.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-09-01T16:38:50.000Z","updated_at":"2024-06-04T15:28:09.000Z","dependencies_parsed_at":"2022-08-06T10:15:08.416Z","dependency_job_id":null,"html_url":"https://github.com/splorp/npds-tracker-server","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/splorp%2Fnpds-tracker-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/splorp%2Fnpds-tracker-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/splorp%2Fnpds-tracker-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/splorp%2Fnpds-tracker-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/splorp","download_url":"https://codeload.github.com/splorp/npds-tracker-server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244630034,"owners_count":20484303,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-28T02:42:12.378Z","updated_at":"2025-03-20T14:30:47.387Z","avatar_url":"https://github.com/splorp.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NPDS Tracker Server\n\nA Java based server for tracking and listing [Newton Personal Data Sharing](http://npds.free.fr/) clients.\n\nThe [NPDS Tracker Server](http://npds.free.fr/trackers/) was originally developed by [Victor Rehorst](http://www.chuma.org/) and [Paul Guyot](http://kallisys.com/).\n\nAdditional contributions and updates have been by generously provided and applied by [Morgan Aldridge](http://makkintosshu.com/), [Grant Hutchinson](http://splorp.com/), [Ron Parker](http://quadzilla.net/), Manuel Probsthain, Peter Geremia, and [Sylvain Pilet](http://message-pad.net/).\n\nMany thanks to [Matt Vaughn](http://chromatin.cshl.edu/vaughn/) for developing NPDS in the first place.\n\nLooking for support? Join the [NPDS mailing list](http://npds.free.fr/list/).\n\n\n## Requirements\n\n### Java 1.3 or later\n\nThe current release of the NPDS Tracker Server has been tested with Java SE (Standard Edition) versions 1.4, 1.5, and 1.6. It will also work with versions earlier than 1.3, but it is not recommended. See the [Basic Set Up](#basic-set-up) section for more information.\n\nThe Java SE runtime can be downloaded from [Oracle](http://www.oracle.com/technetwork/java/javase/).\n\n### An internet connection\n\nThe NPDS Tracker Server listens for clients on TCP port 3680, as assigned by [IANA](http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml). The tracker can also be configured to listen on multiple ports. See the [Settings](#settings) section for more information.\n\n### A text editor\n\nRequired to edit the various configuration and template files.\n\n### A terminal program\n\nRequired to compile the Java source, install the compiled .jar file, and configuring the related files and components. A terminal program can also be used to remote administer the NPDS Tracker Server using Telnet. See the [Remote Administration](#remote-administration) section for more information.\n\n\n## Files\n\n`readme.md` — You’re soaking in it\n\n`npdstracker.java` — Java source code for the tracker\n\n`npdstracker.ini` — Settings and configuration for the tracker\n\n`template.html` — HTML page template used by the tracker\n\n`template.css` — Stylesheet used in conjunction with the HTML page template\n\n`npdscmd.txt` — Initial tracker commands. Registered servers are written to this file upon shutdown\n\n`startnpds.sh` — An example shell script for Unix-like operating systems\n\n`manifest.mf` — Information specific to the creation of the `.jar` file\n\n\n## Getting Started\n\n### Got Java?\n\nFirst, determine whether Java is installed. Open a command line and type:\n\n```sh\nwhich java\n```\n\nThis command will return the path where Java is installed on your system.\n\nFor example:\n\n```sh\n/usr/bin/java\n```\n\nIf a path is not displayed after running this command, then Java is not currently installed on your system. You will need to download and install the [Java SE](http://www.oracle.com/technetwork/java/javase/) software before proceeding.\n\nTo determine the version of Java installed, type the following:\n\n```sh\njava -version\n```\n\nThis command will return information about the current Java installation, including the version number and related software details.\n\nFor example:\n\n```sh\njava version \"1.6.0_30\"\n```\n\n### Grab the source\n\nDownload the [latest version](https://github.com/splorp/npds-tracker-server/archive/master.zip) of the NPDS Tracker Server source. Decompress the archive and move the entire directory to an appropriate location on your system. Technically, you can install and run the tracker software anywhere on your system (providing you have adequate file permissions), with all of the components residing in the same directory. The [Basic Set Up](#basic-set-up) section describes this type of installation.\n\n\n## Basic Set Up\n\n### Compile the source\n\nAssuming that Java 1.3 or later has been correctly installed, open a command line and compile the server source:\n\n```sh\njavac npdstracker.java\n```\n\nDepending on your system environment, you may see messages similar to the following. You can safely ignore them.\n\n```sh\nNote: npdstracker.java uses unchecked or unsafe operations.\nNote: Recompile with -Xlint:unchecked for details.\n```\n\nIf compiling was successful, a series of `.class` files will now reside in the source directory.\n\n```sh\nnpdstracker.class\nnpdstracker$TConnection.class\nnpdstracker$THostInfo.class\nnpdstracker$TQueryException.class\nnpdstracker$TServer.class\nnpdstracker$TServerInfo.class\nnpdstracker$TValidator.class\n```\n\n### Configure the server\n\nEdit `npdstracker.ini` and change the settings specific to your installation.\n\nIf all of the source files remain in the same directory, you will not need to change the defaults for the `pageTemplate`, `cssTemplate`, or `logfile` path settings.\n\nSee the [Settings](#settings) section for setting descriptions and syntax.\n\n### Start the server\n\nStart the server from the command line:\n\n```sh\njava npdstracker\n```\n\nFor Java 1.1 and 1.2 installations, the `-Dsun.net.inetaddr.ttl=0` parameter must be added to the command line. This additional parameter compensates for DNS caching bugs that exist in these versions of the Java runtime.\n\n```sh\njava -Dsun.net.inetaddr.ttl=0 npdstracker\n```\n\nTest the connection to the tracker by launching your web browser using the following URL:\n\n```sh\nhttp://\u003cip/hostname\u003e:3680/\n```\n\nConfigure an [NPDS Tracker Client](http://npds.free.fr/modules/#trackerclient) to point at the tracker, confirming that it registers properly.\n\n\n## Advanced Set Up\n\nThe basic set up is great for development, testing, and Windows deployment. However, for those running Linux or Mac OS X, it may be preferable to install a tidier and more permanent version of the tracker. This involves creating a `.jar` (Java Archive) file, removing the post-compile `.class` files, and moving the various support files into their respective (and arguably more appropriate) directories.\n\n### Compile the source\n\nAssuming that Java 1.3 or later has been correctly installed, open a command line and compile the server source:\n\n```sh\njavac npdstracker.java\n```\n\nIf compiling was successful, a series of `.class` files will now reside in the source directory.\n\n```sh\nnpdstracker.class\nnpdstracker$TConnection.class\nnpdstracker$THostInfo.class\nnpdstracker$TQueryException.class\nnpdstracker$TServer.class\nnpdstracker$TServerInfo.class\nnpdstracker$TValidator.class\n```\n\n### Create the .jar file\n\nWrap all those `.class` files into a single `.jar` file from the command line:\n\n```sh\njar cvfm npdstracker.jar manifest.mf *.class\n```\n\nAfter creating the `.jar`, you can safely delete the now redundant `.class` files:\n\n```sh\nrm *.class\n```\n\n### Put everything in its place\n\nInstall the `.jar` file in `/usr/local/bin` from the command line:\n\n```sh\n[sudo] mkdir -p /usr/local/bin\n[sudo] install npdstracker.jar /usr/local/bin\n```\n\nInstall the `npdstracker.ini` and `npdscmd.txt` files in `/etc` from the command line:\n\n```sh\n[sudo] mkdir -p /etc/npdstracker\n[sudo] install npdstracker.ini npdscmd.txt /etc/npdstracker\n```\n\nInstall the `template.html` and `template.css` files in `/usr/local/share` from the command line:\n\n```sh\n[sudo] mkdir -p /usr/local/share/npdstracker\n[sudo] install template.html template.css /usr/local/share/npdstracker\n```\n\nCreate the log file from the command line:\n\n```sh\n[sudo] touch /var/log/npdstracker.log\n```\n\n### Configure the server\n\nEdit `/etc/npdstracker/npdstracker.ini` from the command line (or using an external text editor). Change the `pageTemplate`, `cssTemplate`, and `logfile` paths as per the installation commands.\n\n```sh\npageTemplate = /usr/local/share/npdstracker/template.html\ncssTemplate = /usr/local/share/npdstracker/template.css\nlogfile = /var/log/npdstracker.log\n```\n\nSee the [Settings](#settings) section for more information on setting parameters and syntax.\n\n\n### Start the server\n\nStart the server from the command line:\n\n```sh\njava -jar /usr/local/bin/npdstracker.jar -c /etc/npdstracker/npdscmd.txt -o /etc/npdstracker/npdstracker.ini\n```\n\nSee [Command Line Usage](#command-line-usage) for further details.\n\nTest the connection to the tracker by launching your web browser using the following URL:\n\n```sh\nhttp://\u003cip/hostname\u003e:3680/\n```\n\nConfigure an [NPDS Tracker Client](http://npds.free.fr/modules/#trackerclient) to point at the tracker, confirming that it registers properly.\n\n\n### Configure a launch daemon\n\nOn Darwin or Mac OS X, you can create a launch daemon to automatically launch the tracker on start up. Create a `/Library/LaunchDaemons/fr.free.npds.npdstracker.plist` file and paste in the following XML. This assumes that you have followed the steps for [Advanced Set Up](#advanced-set-up).\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n    \u003cdict\u003e\n        \u003ckey\u003eLabel\u003c/key\u003e\n        \u003cstring\u003efr.free.npds.npdstracker\u003c/string\u003e\n        \u003ckey\u003eProgramArguments\u003c/key\u003e\n        \u003carray\u003e\n            \u003cstring\u003ejava\u003c/string\u003e\n            \u003cstring\u003e-jar\u003c/string\u003e\n            \u003cstring\u003e/usr/local/bin/npdstracker.jar\u003c/string\u003e\n            \u003cstring\u003e-c\u003c/string\u003e\n            \u003cstring\u003e/etc/npdstracker/npdscmd.txt\u003c/string\u003e\n            \u003cstring\u003e-o\u003c/string\u003e\n            \u003cstring\u003e/etc/npdstracker/npdstracker.ini\u003c/string\u003e\n        \u003c/array\u003e\n        \u003ckey\u003eKeepAlive\u003c/key\u003e\n        \u003cdict\u003e\n            \u003ckey\u003eNetworkState\u003c/key\u003e\n            \u003ctrue/\u003e\n        \u003c/dict\u003e\n        \u003ckey\u003eRunAtLoad\u003c/key\u003e\n        \u003ctrue/\u003e\n    \u003c/dict\u003e\n\u003c/plist\u003e\n```\n\nThe launch daemon may be loaded immediately by running the following from the command line, or you can wait until the next boot cycle:\n\n```sh\nsudo launchctl load /Library/LaunchDaemons/fr.free.npds.npdstracker.plist\n```\n\nOn Linux or BSD systems, you can create `init.d` or `rc.d` scripts, respectively, to automatically start the tracker on boot.\n\n\n## Settings\n\nConfiguration settings for the tracker are located in the `npdstracker.ini` file.\n\n### Syntax\n\nThe following syntax must be followed when editing the configuration settings:\n\n+ Setting values cannot be enclosed in quotation marks\n+ Setting values cannot contain spaces (with the exception of `shareServer` values)\n+ Spaces must appear on either side of the equal sign\n+ Setting parameter names are case sensitive\n\n### Parameters\n\nConfiguration setting parameters are shown listed below, along with with their default values. Note that some parameter names have changed in current releases of the tracker and are not backwards compatible.\n\n#### kPort\n```sh\nkPort = 3680\n```\n\nSpecifies the TCP listening port.\n\nThe default port is 3680, as assigned by [IANA](http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml). However, port 8080 is commonly used for clients that reside behind a firewall. Multiple port numbers may be specified, separated by spaces.\n\n\n#### trackerName\n```sh\ntrackerName = Default\n```\n\nSpecifies the name of the site or tracker for use in the HTML template.\n\nRefer to the [Page Template Tag Syntax](#page-template-tag-syntax) section for usage.\n\n\n#### trackerHost\n```sh\ntrackerHost = http://npds.free.fr/\n```\n\nSpecifies the URL of the site or server host for use in the HTML template.\n\nRefer to the [Page Template Tag Syntax](#page-template-tag-syntax) section for usage.\n\n#### adminPass\n```sh\nadminPass = qwerty\n```\n\nSpecifies the password for the remote administration interface.\n\nThis parameter was named `adminpasswd` in NPDS Tracker Server 0.1.36 and earlier. Make sure that this parameter name is correct in the `npdstracker.ini` file.\n\n\n#### validateTime\n```sh\nvalidateTime = 30\n```\n\nSpecifies how often to validate clients in seconds.\n\n\n#### validateTries\n```sh\nvalidateTries = 3\n```\n\nSpecifies how many validation attempts will be made before clients are removed from the list.\n\n\n#### shareEnabled\n```sh\nshareEnabled = true\n```\n\nSpecifies whether other trackers may obtain SHARE’d records from this tracker.\n\nSet to ‘true’ to allow sharing, set to anything else to disallow sharing.\n\n\n#### shareServer\n```sh\nshareServer = misato.chuma.org 3680\nshareServer = www.unna.org 3680\nshareServer = newtzilla.quadzilla.net 3680\nshareServer = newton.tek-ed.com 3680\n```\n\nSpecifies servers to obtain SHARE’d records from.\n\nEach `shareServer` entry consists of a tracker hostname or address and a port number. To stop obtaining SHARE’d records from a tracker, comment out or delete the tracker’s `shareServer` entry.\n\n\n#### privateHostToAccept\n```sh\nprivateHostToAccept =\n```\n\nSpecifies a private hostname or address to register as a client.\n\nMust be a public DNS entry.\n\n\n#### pageTemplate\n```sh\npageTemplate = template.html\n```\n\nSpecifies the path and name of the HTML template.\n\nRefer to the [Page Template Tag Syntax](#page-template-tag-syntax) section for usage.\n\n\n#### cssTemplate\n```sh\ncssTemplate = template.css\n```\n\nSpecifies the path and name of the template stylesheet.\n\nUsed in conjunction with `pageTemplate`.\n\n\n#### logFile\n```sh\nlogFile = npdstracker.log\n```\n\nSpecifies the path and name of the log file.\n\nLog entries generated by the tracker are rather verbose and the log file can grow quite large over time. You can turn off logging altogether (redirecting to stdout) by commenting out the `logFile` setting once you are sure that the server is configured properly.\n\nThis parameter was named `logfile` in NPDS Tracker Server 0.1.36 and earlier. Make sure that this parameter name is correct in the `npdstracker.ini` file.\n\n\n#### logVerbose\n```sh\nlogVerbose = true\n```\n\nSpecifies whether messages should be written to the log file.\n\nIf set to ‘false’, the tracker will only create a log entry if it encounters a serious problem.\n\nThis parameter was named `shouldIlog` in NPDS Tracker Server 0.1.36 and earlier. Make sure that this parameter name is correct in the `npdstracker.ini` file.\n\n\n## Command Line Usage\n\n```sh\njava npdstracker [-h] [-c \u003ccmdfile\u003e] [-o \u003coptionsfile\u003e]\n```\n\n`-h` — Display help\n\n`-c \u003ccmdfile\u003e`  — Specifies the path of the `npdscmd.txt` file containing any commands to run at startup (defaults to none)\n\n`-o \u003coptionsfile\u003e` — Specifies the path of the `npdstracker.ini` file containing configuration and option settings (defaults to settings at compile time)\n\n\n## Remote Administration\n\nTo access the remote administration interface, you’ll need the following:\n\n+ A terminal program or standalone Telnet client\n+ The hostname and port of the tracker you wish to administer\n+ The password of the tracker you wish to administer\n\nAny changes made using the administration interface are applied immediately to the tracker, but are not saved to the `npdstracker.ini` file. Changes are lost once the tracker is restarted.\n\n### Connection\n\nThis example assumes that the tracker is configured to use the default port number.\n\nIn your terminal program, open the Telnet connection to the tracker.\n\n```sh\ntelnet tracker.example.com 3680\n```\n\nHit ‘Enter’\n\nAfter you connect to the tracker, you have five seconds to enter the following:\n\n```sh\nADMIN \u003cpassword\u003e\n```\n\nHit ‘Enter’\n\nYou will be presented with the following text:\n\n```sh\nWelcome to the NPDS Tracker Server administration interface!\n```\n\nNext, type:\n\n```sh\nHELP\n```\n\nHit ‘Enter’\n\nThis will display a list of available commands.\n\n### Commands\n\n`ABOUT` — Display the current tracker settings\n\n`HALT` — Stop the tracker (with confirmation)\n\n`HELP` — Displays this list of commands\n\n`LOGS` — Dumps the tracker log\n\n`SHARE` — Change the tracker share settings\n\n`SLIST` — View or modify the list of trackers to obtain shared records from\n\n`VTEST` — Trigger a tracker validation\n\n`STATS` — Display the tracker statistics (describe)\n\n`VERIFY` — Change the tracker verification settings\n\n`QUIT` — Exit the administration interface and close the connection\n\n\n## Page Template Tag Syntax\n\nThe [HTML page template](#pagetemplate) can be customized using the following pseudo-SGML tags to insert information into the page. Note that some tag names have changed in current releases of the tracker and are not backwards compatible.\n\n`\u003chit-counter/\u003e` — The number of page views since the tracker was restarted\n\n`\u003chit-counter-noun/\u003e` — Singular or plural noun based on the page views (“time” vs “times”)\n\n`\u003chttp-doc/\u003e` — What comes after the GET (usually “/”)\n\n`\u003clast-validation/\u003e` — The date and time of the last validation or “Validation is in progress.”\n\n`\u003cmeta-refresh/\u003e` — The meta element containing the http-equiv=\"refresh\" value\n\n`\u003cservers/\u003e` — The list of registered NPDS clients formatted as a table\n\n`\u003cserver-counter/\u003e` — The number of registered NPDS clients\n\n`\u003cserver-noun/\u003e` — Singular or plural noun based on number of clients (“server” vs “servers”)\n\n`\u003cserver-verb/\u003e` — Singular or plural verb based on number of clients (“is” vs “are”)\n\n`\u003cserver-shares/\u003e` — A linked list of SHARE’d trackers formatted as an unordered list\n\n`\u003cstylesheet/\u003e` — Inserts the stylesheet as specified in npdstracker.ini (default: template.css)\n\n`\u003ctracker-host/\u003e` — The URL of the host site or tracker as specified in npdstracker.ini\n\n`\u003ctracker-name/\u003e` — The name of the host site or tracker as specified in npdstracker.ini\n\n`\u003curl/\u003e` — The URL of this tracker, obtained by reading the HTTP header\n\n`\u003cvalidate-time/\u003e` — The time (in minutes) between validations\n\n`\u003cvalidate-time-noun/\u003e` — Singular or plural noun based on the time period (“minute” vs “minutes”)\n\n`\u003cversion/\u003e` — The current version of the tracker software\n\n\n## Licensing\n\nCopyright © 2001–2017 Grant Hutchinson, Victor Rehorst, Paul Guyot, et al\n\nThis project is licensed under the short and sweet [MIT License](http://opensource.org/licenses/MIT). This license allows you to do anything pretty much anything you want with the contents of the repository, as long as you provide proper attribution and don’t hold anyone liable.\n\nSee the [license.txt](https://raw.githubusercontent.com/splorp/npds-tracker-server/master/license.txt) file included in this repository for further details.\n\n\n## Version History\n\n### 0.1.38 — 31 January 2017\n\n+ [GH] New `\u003cserver-noun/\u003e` and `\u003cserver-verb/\u003e` template tags because grammar\n+ [GH] New `\u003chit-counter-noun/\u003e` and `\u003cvalidate-time-noun/\u003e` template tags because grammar\n+ [GH] Standardized template tag naming for `\u003ctracker-host/\u003e` and `\u003ctracker-name/\u003e`\n+ [GH] Changed date formatting to use full day and month names\n+ [GH] Added initial media queries and responsive layout styles\n+ [GH] Simplified template and validation string markup\n+ [GH] Added MIT license\n\n### 0.1.37 — 18 December 2012\n\n+ [RP] New `\u003cserver-shares/\u003e` template tag inserts a list of shared trackers\n+ [GH] Added command line usage information\n+ [GH] Added remote administration documentation\n+ [GH] Added getting started documentation\n+ [GH] Added configuration settings documentation\n+ [GH] Removed redundant configuration comments from the `npdstracker.ini` file\n+ [GH] Reinstated classes on unordered lists so they can be styled independently\n+ [GH] Wrapped link lists in `\u003cnav\u003e` elements\n+ [GH] Renamed several configuration parameters\n+ [GH] Previous `npdstracker.ini` files are no longer compatible with this version of the tracker\n\n### 0.1.36 — 28 August 2012\n\n+ [MA] Split out display of HTML status into its own method\n+ [MA] Updated HTTP GET processing to support rendering the HTML status page\n+ [MA] Fixed stylesheet configuration and template insertion\n+ [RP] Added host name and link to the header and page title\n+ [MA] Removed rogue slash in `npdstracker.java`\n+ [MA] Added manifest file\n+ [MA] Added advanced set up documentation\n+ [GH] Added Java compatibility documentation\n+ [GH] Converted template to HTML5\n+ [GH] Removed deprecated elements and formatting attributes\n+ [GH] Minor formatting and nomenclature edits abound!\n+ [GH] Converted read me to Markdown format\n\n### 0.1.35 — 08 September 2010\n\n+ [GH] Moved source to GitHub\n+ [GH] Added user definable stylesheet template\n+ [GH] Moved stylesheet from template.html into its own file\n+ [GH] Moved version history from Java source file into read me\n+ [GH] Minor text formatting updates\n+ [GH] Changed all document encoding to UTF-8\n\n### 0.1.34 — 06 April 2006\n\n+ [VR] Added `shouldIlog` setting in INI file to disable all logging\n\n### 0.1.33 — 22 February 2004\n\n+ [MP] Added SSI tag for displaying the number of registered clients in the template\n+ [MP] Made the `\u003cmeta-refresh/\u003e` SSI XHTML-compatible\n+ [MP] Changed the default port number to 3680\n+ [MP] Refined the listing table elements for extensive use of CSS\n+ [MP] Added code to allow one hostname with a private IP to register\n\n### 0.1.32 — 02 May 2003\n\n+ [VR] Makes sure that the hostname isn’t empty on a REGUP command\n+ [VR] Changed `kRTFMStr` to reflect new NPDS website address\n\t\n### 0.1.31 — 30 July 2002\n\n+ [PG] The tracker can now listen on several ports\n\n### 0.1.30 — 28 April 2002\n\n+ [PG] Fixed the bug in 192.168.* address filtering\n\n### 0.1.29 — 16 March 2002\n\n+ [PG] Fixed the bug in processing of console commands, so now lowercase commands work\n+ [PG] The console now says “server validation test started” before it finishes the validation\n+ [PG] The tracker was waiting forever for an answer from fellow trackers, which was bad\n+ [PG] Added style information to colorize the table\n+ [PG] The tracker performs a verification on startup\n+ [PG] Vector copy constructor is no longer called, so this should compile on Java \u003c 1.2 (but it will have problems because of bugs in the JVM)\n+ [PG] The tracker now checks the hosts passed as REGUP parameters to be correct (to resolve and to be not private)\n\n### 0.1.28 — 29 November 2001\n\n+ [PG] No longer dumps the shared trackers to npdscmd.txt\n+ [PG] Fixed the `shareEnabled` .ini read process (`getBoolean` is not what we want, it’s `valueOf`)\n\n### 0.1.27 — 20 October 2001\n\n+ [VR] Now saves registered client information for automatic reloading upon a crash or restart\n\n### 0.1.26 — 18 August 2001\n\n+ [PG] Fixed the `java.lang.ArrayIndexOutOfBoundsException` bug introduced in version 0.1.24\n\n### 0.1.25 — 06 June 2001\n\n+ [PG] Fixed the `java.lang.IllegalArgumentException: timeout value is negative` bug (well, I think)\n\n### 0.1.24\n\n+ [PG] Fixed the reload 0 bug\n+ [PG] Fixed the lock bug\n+ [PG] Set the timeout to 20 seconds (was 10 seconds) so my Newton is no longer considered as down\n+ [PG] Added last validation template element\n\n### 0.1.23\n\n+ [VR] No actual code changes, but documented workaround for the JDK 1.1 bug\n\n### 0.1.22\n\n+ [PG] Implemented the template stuff\n+ [PG] Reorganized the `ProcessQuery` method\n+ [PG] There is now a single class with embedded sub classes (so we’ll have a single .java binary)\n+ [PG] Improved answer to the GET request (with many headers now)\n\n### 0.1.21\n\n+ [PG] No longer uses the bugged URL interface to check if Newton clients are up. Instead, I use a socket\n+ [PG] The REGUP command tokenizer now accepts any standard token (and no longer only spaces which wasn’t protocol-compliant)\n+ [PG] Added several syntax checking with an appropriate status message\n\n### 0.1.20\n\n+ [VR] Retrieving SHARE records from other trackers now works!\n\n### 0.1.19\n\n+ [VR] Will now read `optionsfile` and `cmdfile` from default location\n+ [VR] Fixed up options file parsing\n+ [VR] HTML now easily customizable using `npdstracker.ini`, `header.html`, `footer.html`\n\n### 0.1.18\n\n+ [VR] Minor admin console fixes\n+ [VR] Implemented command-line arguments for `logfile`, `cmdfile`, `optionsfile`\n+ [VR] Now can specify files to log to, read options from, or read initial commands from\n+ [VR] Finally implemented LOGS command in admin console\n+ [VR] Code and syntax cleanups\n+ [PG] Use `SimpleDateFormat` in the `ReturnRFCTime` function. (this also fixes the GMT bug)\n+ [PG] Fixed a little HTML bug\n\n### 0.1.17\n\n+ [VR] VTEST command added to the admin console\n+ [VR] SHARE command is now actually sent (forgot to flush `PrintWriter`)\n+ [VR] Changed return code of SHARE command if sharing is disabled\n\n### 0.1.16\n\n+ [PG] The tracker now only sleeps in the validator loop\n\n### 0.1.15\n\n+ [PG] Now the tracker always uses CRLF except for the log\n+ [PG] Fixed a little bug in the validation date\n\n### 0.1.14\n\n+ [PG] Now supports multiple connections\n\n### 0.1.13\n\n+ [VR] Trying to fix intermittent bug in client validation code\n\n### 0.1.12\n\n+ [VR] More bugs in client validation fixed\n\n### 0.1.11\n\n+ [VR] Added more features to GET code\n+ [VR] Fixed up RFC times somewhat\n+ [VR] Fixed bug in validation code with “Connection Refused” socket exceptions\n\n### 0.1.10\n\n+ [VR] Fixed bug with exception passing and tracker socket code\n+ [VR] Rewrote GET code to return a nice HTML 4.01 compliant table\n\n### 0.1.9\n\n+ [VR] Admin console is now complete save for the LOGS command\n+ [VR] Now retrieves, updates, and properly handles records from other trackers via the SHARE command\n\n### 0.0.8\n\n+ [VR] Added SHARE, ABOUT, VERIFY, and STATS command to admin console\n+ [VR] Fixed the problem with the verification code repeating many times per minute\n+ [VR] Added a REGUP counter for the STATS admin command\n\n### 0.0.7\n\n+ [VR] Now accepts commands regardless of case\n+ [VR] Checks for an existing host entry before processing a REGUP\n+ [VR] Started implementing the ADMIN command for live configuration of the tracker\n\n### 0.0.6\n\n+ [VR] First implementation of SHARE command\n+ [VR] Cleaned up some return codes\n+ [VR] Fixed some status handling and checking\n\n### 0.0.5\n\n+ [VR] Client validation actually works! Woo hoo!\n+ [VR] Implemented a socket timeout so that the loop doesn’t get stuck\n+ [VR] Removed the QHTML extended command\n\n### 0.0.4\n\n+ [VR] Implemented Return Codes\n\n### 0.0.3\n\n+ [VR] Fixed GET method so it returns DTD HTML 2.0 compliant pages\n+ [VR] Rewrote internal storage of records for extensibility\n+ [VR] Now we store time client last checked and its status\n+ [VR] Implemented `QueryMethod` function for finding a record when we do a REGDN (could also use this method for an possible SRCH command later)\n\n### 0.0.2\n\n+ [VR] Added QHTML method for returning HTML-ized results\n+ [VR] Added GET method support for returning a basic web page to web browsers\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplorp%2Fnpds-tracker-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsplorp%2Fnpds-tracker-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplorp%2Fnpds-tracker-server/lists"}