aprsd 2.1.4 Aug 2000 This is a free APRS server/igate for Linux. Full documentation can be viewed at: http://www.wa4dsy.net/aprs/aprsdDOC.html ------------------------------------------------------------- REVISION HISTORY 2.1.4 Aug 19 2000 1) Fixed DeleteSession() so it can't delete if port number is -1 and made ConnectedClients a signed integer. Hopefully this will prevent errors in the user count. 2) The dup detector now ignores trailing spaces 3) Put Location info on the html status page 4) Deal with mic-e timestamps as per this email from Bob on Aug 3 2000. "We should not have included the timestamp when the conversion was done by an IGate just for the reasons that we dropped the time stamp in all other stations back in 1996. It was a mistake and we should fix it by simply replacing the "@DDHHMMz" portion of the conversion with a "!" for TAPR Mic-E's and to a "=" format for Message capable Mic-E's (Kenwoods). This would eliminate this nuisance immediately. " 5) Fixed bug in HUB connection logic that caused it to advance by two instead of one after attempting to connect to a hub that was down. If only 2 hubs were defined it would always retry the same dead hub over and over. 6) Added command "LogAllRF" to aprsd.conf. When set to "yes" all packets heard from the TNC will be written to /aprsd2/rf.log instead of only packets with our call sign as was the case. 7) Added keyword "ConvertMicE yes | no" to aprsd.conf file. If this is set to "yes" Mic-E packets will be converted to classic APRS packets, otherwise they will pass through unchanged. Default is "no" . 8) Cleaned up some code in history.cpp: createHistoryArray(aprsString* hp) so it now aborts a history dump if memory allocation fails. The original code ignored a malloc failure. 2.1.3 July 6 2000 1) Fixed bug in user counter that incremented each time a hub connection was restablished and outgoing data was enabled, eg: a user and pass code provided. This bug caused the user limit to be exceeded even though there were not really that many users. 2.1.2 June 2000 0) Fixed lots of problems in the Mic-e conversion routine. It now conforms to the APRS PROTOCOL REFERENCE 1.0 Conversion errors should be gone now! 1) Changed packet buffers size from 1024 bytes to 255 bytes 2) Added a filter in SendToAllClients() to remove 3rd party reformatted packets from Internet data stream 3) Raised the igate limit from 20 to 100 4) Fixed error in serverConfig() that allowed more igates to be defined than buffer size permitted 5) Added "MSTAMP OFF" to TNC.INIT file 6) "# Tickle" is removed. 7) Added http server to provide status information in HTML format on port 14501 (or user defined) 8) Added keyword for aprsd.conf file to support http server configuration: httpport To change the port number add to your aprsd.conf file: httpport nnnnn where "nnnnn" is the port number. To DISABLE this feature add this to your aprsd.conf file: httpport 0 9) Fixed bug in SendToAllClients() which failed to close the socket when user disappeared. 10) Filter out comment packets, eg: # Tickle, at the igate and user inputs so they aren't repeated. 11) Added keyword for aprsd.conf to support a data port suppling the source IP address prepended to each aprs packet. eg: If user w4xyz at IP address 192.168.1.2 sends "Hi There." the packet will be sent out as: "!192.168.1.2:w4xyz!Hi There." This can help locate the source of bogus packets. To change the port number add to your aprsd.conf file: ipwatchport nnnnn where "nnnnn" is the port number. To DISABLE this feature add this to your aprsd.conf file: ipwatchport 0 12) Fixed end-of-line logic so it accepts CR or LF or CR-LF or LF-CR on all incoming internet packets. Now we can use netcat (nc) in addition to telnet to logon and watch the raw data. 13) Fixed error in code that reads the history.txt file. Now history items that have expired are ignored and don't go into the history list. Time-to-live (ttl) variables adjusted for current time. 14) Completely redesigned and recoded the duplicate packet detection logic. This effort broke lots of things and several days of debugging were required! This version should eliminate 100% of duplicates occuring within 15 seconds. See dupCheck.cpp, crc32.c and aprsString::gethash(). 15) Program doesn't Segfault on exit anymore. 16) The MYCALL parameter in the INIT.TNC file is read into the MyCall variable in aprsd and overides the MyCall parameter in the aprsd.conf file. If the TNC serial port is not defined the MyCall parameter in aprsd.conf is used. Previous versions required you to enter identical MYCALL strings in BOTH aprsd.conf and INIT.TNC. Now you only need one in INIT.TNC. 17) In INIT.TNC the first parameter to UNPROTO, the ax25 destination address, is replaced by the string "APDxxx" where xxx is the verison number of aprsd. This is done as the file is read into the TNC with "APDxxx" replacing the users string. eg: UNPROTO APRS VIA WIDE would become UNPROTO APD212 VIA WIDE. APDxxx is also inserted into the ax25 destination field of all packets created of converted by aprsd. 18) History list data is NOT saved to disk every 15 minutes. This is now done only at shutdown. 19) Cleaned up code so it now compiles without warnings with the -Wall option. Added "#define _PTHREADS" and "#define _GNU_SOURCE" to all sources. This should make the STL container library thread safe. 20) Changed instances of gethostbyname2() to the thread safe version, gethostbyname2_r(). Also found and changed some other non thread safe fuctions to the safe versions. 21) I fixed a bug in the igate connection thread which resulted in sockets not being closed after a failed attempt to connect. This caused aprsd to eventually run out of sockets if one or more igates were unreachable. When this happened no more connections could be made. This bug has been in all previous versions and I believe it has caused most of the "lockup" problems. 22) Added "hub" keyword to aprsd.conf. This is used the same way as "igate" to define remote systems to connect to. The difference is that although many hubs can be defined only one connection will be active at any time. If the connection fails the next hub will be tried in rotation until one accepts a connection. Use "hub" to connect to the "master" aprs servers on port 10152 or 23. ------------------------ 2.1.1 4-11-2000 1) Put the formerly secret validation module "validate.cpp" into the open source directory. 2) Wrote aprspass.cpp to generate passcodes from callsigns. 3) Fixed error in aprsString.cpp method AEAtoTAPR. It doesn't reverse the path now. 4) Changed default APRServe in aprsd.conf to second.aprs.net. 5) Updated documentation file aprsddoc.html. 6) Fixed bug in ?IGATE? query response so full host name is now displayed. 7) Install scripts modified to compile source code before installing. 8)Added keyword "aprsPass " to aprsd.conf. Set to "no" if you don't want to allow logons from users with the insecure aprs passcodes. Set to "yes" if you want the system to work with all users. -------------------------- 2.1.0 6-22-1999 1) Fixed the code so it runs properly as a daemon. See added function "daemonInit()" in code. Also modified aprsd.init . To run as a daemon enter: ./aprsd -d To run as a program enter: ./aprsd 2) Added logic to handle MD5 password encryption in the validate module. Now it works with RedHat 6.0 shadowed MD5 passwords. 3) Added "#include " statements in history.cpp and aprsd.cpp. Now it now compiles under RedHat 6.0. 4) Changed logic so messages sent on RF also are sent to other Internet users. Needed to do this so messages to wild card groups such as "SCOUTS" go both to RF and the remainder of the users and igates. 5) Fixed 2 bugs in mic_e and raw user port code. Now mic_e packets come out in raw format on port 14580 . 6) Fixed bug that caused the history list dump to abort and disconnect user after about 700 items had been sent. 7) New Feature: The server now responds to the "?IGATE?" query. 8) New Feature: You can put system abusers in the "user.deny" file and deny access to RF or prevent them from logging on. 9) New Feature: You can configure the server to ignore packets which were transmitted from your own TNC. The previous versions always igated your own TNCs packets. Use the command line "igateMyCall no" in aprsd.conf file to turn off igateing of your own TNCs packets. 10) Changed the servers status messages to the new format. eg: "aprsdATL>APRS,TCPIP*::USERLIST :Verified user W4HAM has logged on." Note the extra colon after TCPIP* and the lack of a message number on the end to indicate we don't expect an ack. 11) Fixed speed related problem in SendToAllClients() function that caused overflows of the Internet send queue. The server can now handle many more users at higher data rates. 12) Added command "TncPktSpacing" to the aprsd.conf file. This command takes one parameter which is the number of milliseconds between packets sent to the TNC. Queued packets to be transmitted will be spaced out at least by this number of milliseconds. The default is 1500 (1.5 seconds).