- Fix parsing of MaxClientsPerIP configuration parameter when the MaxClients parameter is also being specified. - Allow connections from addresses that have write permission even when the maximum number of connections has been reached. The reserve space is currently 10 connections. - Clarify in documentation that clients connecting from the localhost loopback address (127.0.0.1) is only granted write permission if no other addresses are explicitly granted write permission.
Mostly refinements and bug-fixes, this release contains one significant operator feature: the new MaxClientsPerIP parameter enforces a limit of connections per IP address.
Full change list:
2015.182: - Dynamically allocate record buffer for use in slclient.c:HandleInfo() in order guarantee that it is properly aligned for the host architecture. Thanks Doug Neuhauser for identifying this issue (under Solaris x86). 2015.156: - Update pcre to 8.37. - Add 'MaxClientsPerIP' config parameter and -M command line option to enforce a maximum number of connections per IP address. The limit does not apply to addresses with write permission. Default is no per-IP maximum. - Copy pcre/pcre_chartables.c.dist to pcre/pcre_chartables.c to avoid symbolic link problems on, for example, Cygwin. 2015.149: - Update libmseed to 2.16m. - Restart listening server threads (SeedLink and DataLink) without initializing the server socket when the socket is already set up. - Continue accept()ing new connections and do not exit if the accept() returns an error of ECONNABORTED or EINTR. These errors are non-critical and should not cause the listening thread to exit. - InitServerSocket(): close socket on error return from setsockopt() to avoid leaving an open socket in that error condition. Thanks to Doug Neuhauser for reporting and suggesting above fixes. - Close corrupt ring buffer file when performing autorecovery in all cases.
- Update libmseed to 2.15. - Update pcre to 8.36. Note: development of pcre has moved to pcre2. - Update mxml to 2.9. - Improve detection of ring corruption by adding a 'corruptflag' to the ring parameters, setting it in RingWrite() and checking it on initialization. This will trigger consistent corruption detection on initialization whenever the previous execution ended when RingWrite() detected an error. - mseedscan.c: rearrange stored directory entry listing details to avoid needing to copy potentially variable length struct dirent. This code now works on platforms without dirent.d_reclen support, e.g. Cygwin. Thanks to Eric Thomas for reporting this.
- Update mxml to 2.8. - Update pcre to 8.35. - Update libmseed to 2.13. - Changes to support much larger SeedLink requests: a) Increase max internal regex buffer size from 65,536 to 1,048,576 by changing SLMAXREGEXLEN and DLMAXREGEXLEN. b) Increase max buffer for per-station/global selectors from 400 to 2,048. c) Configure the PCRE to use an internal link size of 4 instead of 2. The effective limit depends on the composite selection, e.g. number of STATIONs and number SELECTions per STATION. With 6 selections each, over 10,000 stations may be requested. Over 200 selectors for a request with fewer stations. Requests can now be unreasonably large. - Optimize packet search loop in RingAfter() and RingAfterRev(), which are used to position a reader based on packet time, by avoiding the regex tests when possible. Suggested code by Mark Chadwick. - Include offset in the regex pattern in the error message printed when pcre_compile() returns an error. - Improve error messasges in sliclient.c when RingMatch() or RingReject() return failures. - Add " ..." to log messages that were truncated at 200 characters. - Add example of using Match with the MSeedScan option to the man page. - Clean up Makefile and src/Makefile.
- Increment transmission packet count per stream for SeedLink clients; for transmission logging, packet counts were previously zero, byte counts were (and remain) correct.
Also available in: Atom