Hi,
after some testing it seems 2.9p4 is broken, on my lab net (DS9097u) no
devices appear at all when doing owdir. On my primary net (LinkUSB), the
search revealed some devices, but not all.. Reading did not seem
possible (something about device not on bus, but did not look closer
since I did not want my primary net down).
After some digging, I narrowed it down to the changes in ow_select.c in
commit eab3f99828ffecf81318363c82f81fc36c1b5ca1. There are no DS2409
involved in any of the nets, so it seems these fixes somehow have
unwanted sideeffects.
Unfortunately, the code is somewhat to complex without deep
understanding of how owfs works, so I cannot dig much further. However,
debug-logs provided below, and I can assist with testing patches if
necessary.
Btw, while digging around the code, I noticed there are no git tags yet.
I recommend a tag to be made for every release. Simplifies when looking
for what changed.. :) Should be as easy as "git tag v2.9p3
<gitrev-of-2.9p3-release> && git push --tags".
Best regards
Johan
Debug output, with the patch above (ow_select.c + ow_parsedname.h only)
reverted, from freshly started owserver and excuting "owdir /":
DEBUG: ow_tcp_read.c:(64) attempt 24 bytes Time: 10.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 24 - 0 = 24
DEBUG: from_client.c:(66) FromClient payload=2 size=0 type=7 sg=0x10A
offset=0
DEBUG: from_client.c:(74) FromClient (no servermessage) payload=2
size=0 type=7 controlflags=0x10A offset=0
DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 10.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
DEBUG: handler.c:(153) START handler /
CALL: data.c:(104) DataHandler: parse path=/
DEBUG: ow_parseobject.c:(164) /
CALL: ow_parsename.c:(102) path=[/]
CALL: data.c:(164) Directory message (all at once)
DEBUG: dirall.c:(66) OWSERVER Dir-All SpecifiedBus=0 path = /
DEBUG: ow_dir.c:(78) path=/
CALL: ow_dir.c:(102) path=/
DEBUG: ow_cache.c:(854) Looking for directory 00 00 00 00 00 00 00 00
DEBUG: ow_cache.c:(867) Get from cache sn 00 00 00 00 00 00 00 00
pointer=0x800b0e5cc extension=0
DEBUG: ow_cache.c:(896) Dir not found in cache
DEBUG: ow_search.c:(32) Start of directory path=/ device=00 00 00 00
00 00 00 00
DEBUG: ow_select.c:(66) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(79) Continuing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 16 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 16 - 0 = 16
DEBUG: ow_ds9097U.c:(730) SN found: 10 50 1C EE 00 08 00 A2
DEBUG: ow_search.c:(74) Device found: 10 50 1C EE 00 08 00 A2
DEBUG: ow_cache.c:(547) Adding device location 10 50 1C EE 00 08 00
A2 bus=0
DEBUG: ow_cache.c:(636) Add to cache sn 10 50 1C EE 00 08 00 A2
pointer=0x800b0e5c4 index=0 size=4
DEBUG: ow_cache.c:(547) Adding device location 10 50 1C EE 00 08 00
A2 bus=0
DEBUG: ow_cache.c:(636) Add to cache sn 10 50 1C EE 00 08 00 A2
pointer=0x800b0e5c4 index=0 size=4
CALL: ow_parsename.c:(102) path=[/10.501CEE000800]
DEBUG: ow_cache.c:(913) Looking for device 10 50 1C EE 00 08 00 A2
DEBUG: ow_cache.c:(1069) Search in cache sn 10 50 1C EE 00 08 00 A2
pointer=0x800b0e5c4 index=0 size=4
DEBUG: ow_cache.c:(1085) Value found in cache. Remaining life: 120
seconds.
DEBUG: ow_presence.c:(76) Found device on bus 0
DEBUG: ow_parsename.c:(61) /10.501CEE000800
DEBUG: ow_select.c:(66) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(79) Continuing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 16 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 16 - 0 = 16
DEBUG: ow_ds9097U.c:(730) SN found: 28 17 A3 DB 00 00 00 28
DEBUG: ow_search.c:(74) Device found: 28 17 A3 DB 00 00 00 28
DEBUG: ow_cache.c:(547) Adding device location 28 17 A3 DB 00 00 00
28 bus=0
DEBUG: ow_cache.c:(636) Add to cache sn 28 17 A3 DB 00 00 00 28
pointer=0x800b0e5c4 index=0 size=4
DEBUG: ow_cache.c:(547) Adding device location 28 17 A3 DB 00 00 00
28 bus=0
DEBUG: ow_cache.c:(636) Add to cache sn 28 17 A3 DB 00 00 00 28
pointer=0x800b0e5c4 index=0 size=4
CALL: ow_parsename.c:(102) path=[/28.17A3DB000000]
DEBUG: ow_cache.c:(913) Looking for device 28 17 A3 DB 00 00 00 28
DEBUG: ow_cache.c:(1069) Search in cache sn 28 17 A3 DB 00 00 00 28
pointer=0x800b0e5c4 index=0 size=4
DEBUG: ow_cache.c:(1085) Value found in cache. Remaining life: 120
seconds.
DEBUG: ow_presence.c:(76) Found device on bus 0
DEBUG: ow_parsename.c:(61) /28.17A3DB000000
DEBUG: ow_select.c:(66) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(79) Continuing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 16 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 16 - 0 = 16
DEBUG: ow_ds9097U.c:(730) SN found: 12 2F A7 7F 00 00 00 43
DEBUG: ow_search.c:(74) Device found: 12 2F A7 7F 00 00 00 43
DEBUG: ow_cache.c:(547) Adding device location 12 2F A7 7F 00 00 00
43 bus=0
DEBUG: ow_cache.c:(636) Add to cache sn 12 2F A7 7F 00 00 00 43
pointer=0x800b0e5c4 index=0 size=4
DEBUG: ow_cache.c:(547) Adding device location 12 2F A7 7F 00 00 00
43 bus=0
DEBUG: ow_cache.c:(636) Add to cache sn 12 2F A7 7F 00 00 00 43
pointer=0x800b0e5c4 index=0 size=4
CALL: ow_parsename.c:(102) path=[/12.2FA77F000000]
DEBUG: ow_cache.c:(913) Looking for device 12 2F A7 7F 00 00 00 43
DEBUG: ow_cache.c:(1069) Search in cache sn 12 2F A7 7F 00 00 00 43
pointer=0x800b0e5c4 index=0 size=4
DEBUG: ow_cache.c:(1085) Value found in cache. Remaining life: 120
seconds.
DEBUG: ow_presence.c:(76) Found device on bus 0
DEBUG: ow_parsename.c:(61) /12.2FA77F000000
DEBUG: ow_select.c:(66) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(79) Continuing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 16 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 16 - 0 = 16
DEBUG: ow_ds9097U.c:(730) SN found: 01 CF 80 B1 0B 00 00 92
DEBUG: ow_search.c:(74) Device found: 01 CF 80 B1 0B 00 00 92
DEBUG: ow_cache.c:(547) Adding device location 01 CF 80 B1 0B 00 00
92 bus=0
DEBUG: ow_cache.c:(636) Add to cache sn 01 CF 80 B1 0B 00 00 92
pointer=0x800b0e5c4 index=0 size=4
DEBUG: ow_cache.c:(547) Adding device location 01 CF 80 B1 0B 00 00
92 bus=0
DEBUG: ow_cache.c:(636) Add to cache sn 01 CF 80 B1 0B 00 00 92
pointer=0x800b0e5c4 index=0 size=4
CALL: ow_parsename.c:(102) path=[/01.CF80B10B0000]
DEBUG: ow_cache.c:(913) Looking for device 01 CF 80 B1 0B 00 00 92
DEBUG: ow_cache.c:(1069) Search in cache sn 01 CF 80 B1 0B 00 00 92
pointer=0x800b0e5c4 index=0 size=4
DEBUG: ow_cache.c:(1085) Value found in cache. Remaining life: 120
seconds.
DEBUG: ow_presence.c:(76) Found device on bus 0
DEBUG: ow_parsename.c:(61) /01.CF80B10B0000
DEBUG: ow_cache.c:(479) Adding directory for 00 00 00 00 00 00 00 00
elements=4
DEBUG: ow_cache.c:(636) Add to cache sn 00 00 00 00 00 00 00 00
pointer=0x800b0e5cc index=0 size=32
....
With the patch applied (i.e. current HEAD), non-working debug output:
DEBUG: ow_tcp_read.c:(64) attempt 24 bytes Time: 10.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 24 - 0 = 24
DEBUG: from_client.c:(66) FromClient payload=2 size=0 type=7 sg=0x10A
offset=0
DEBUG: from_client.c:(74) FromClient (no servermessage) payload=2
size=0 type=7 controlflags=0x10A offset=0
DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 10.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
DEBUG: handler.c:(153) START handler /
CALL: data.c:(104) DataHandler: parse path=/
DEBUG: ow_parseobject.c:(164) /
CALL: ow_parsename.c:(102) path=[/]
CALL: data.c:(164) Directory message (all at once)
DEBUG: dirall.c:(66) OWSERVER Dir-All SpecifiedBus=0 path = /
DEBUG: ow_dir.c:(78) path=/
CALL: ow_dir.c:(102) path=/
DEBUG: ow_cache.c:(854) Looking for directory 00 00 00 00 00 00 00 00
DEBUG: ow_cache.c:(867) Get from cache sn 00 00 00 00 00 00 00 00
pointer=0x800b0e5cc extension=0
DEBUG: ow_cache.c:(896) Dir not found in cache
DEBUG: ow_search.c:(32) Start of directory path=/ device=00 00 00 00
00 00 00 00
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(82) Clearing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
DEBUG: ow_transaction.c:(113) send = 0
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_transaction.c:(131) readin = 0
DEBUG: ow_transaction.c:(98) compare = 1
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(82) Clearing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
DEBUG: ow_transaction.c:(113) send = 0
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_transaction.c:(131) readin = 0
DEBUG: ow_transaction.c:(98) compare = 1
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(82) Clearing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
DEBUG: ow_transaction.c:(113) send = 0
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_transaction.c:(131) readin = 0
DEBUG: ow_transaction.c:(98) compare = 1
CALL: ow_parsename.c:(102) path=[/bus.0]
DEBUG: ow_parsename.c:(61) /bus.0
CALL: ow_parsename.c:(102) path=[/uncached]
DEBUG: ow_parsename.c:(61) /uncached
CALL: ow_parsename.c:(102) path=[/settings]
DEBUG: ow_parsename.c:(61) /settings
CALL: ow_parsename.c:(102) path=[/system]
DEBUG: ow_parsename.c:(61) /system
CALL: ow_parsename.c:(102) path=[/statistics]
DEBUG: ow_parsename.c:(61) /statistics
CALL: ow_parsename.c:(102) path=[/structure]
DEBUG: ow_parsename.c:(61) /structure
DEBUG: ow_dir.c:(197) ret=-5
DEBUG: ow_parsename.c:(61) /
DEBUG: data.c:(194) DataHandler: FS_ParsedName_destroy done
DEBUG: data.c:(208) DataHandler: cm.ret=-5
DEBUG: to_client.c:(76) payload=0 size=0, ret=-5, sg=0x10A offset=0
DEBUG: to_client.c:(85) No data
DEBUG: data.c:(227) Finished with client request
DEBUG: handler.c:(135) OWSERVER handler done
DEBUG: ow_net_server.c:(238) Normal exit.
DEBUG: ow_tcp_read.c:(64) attempt 24 bytes Time: 10.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 24 - 0 = 24
DEBUG: from_client.c:(66) FromClient payload=2 size=0 type=4 sg=0x10A
offset=0
DEBUG: from_client.c:(74) FromClient (no servermessage) payload=2
size=0 type=4 controlflags=0x10A offset=0
DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 10.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
DEBUG: handler.c:(153) START handler /
CALL: data.c:(104) DataHandler: parse path=/
DEBUG: ow_parseobject.c:(164) /
CALL: ow_parsename.c:(102) path=[/]
CALL: data.c:(160) Directory message (one at a time)
CALL: dir.c:(74) DirHandler: pn->path=/
DEBUG: dir.c:(79) OWSERVER SpecifiedBus=0 path=/
DEBUG: ow_dir.c:(78) path=/
CALL: ow_dir.c:(102) path=/
DEBUG: ow_cache.c:(854) Looking for directory 00 00 00 00 00 00 00 00
DEBUG: ow_cache.c:(867) Get from cache sn 00 00 00 00 00 00 00 00
pointer=0x800b0e5cc extension=0
DEBUG: ow_cache.c:(896) Dir not found in cache
DEBUG: ow_search.c:(32) Start of directory path=/ device=00 00 00 00
00 00 00 00
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(82) Clearing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
DEBUG: ow_transaction.c:(113) send = 0
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_transaction.c:(131) readin = 0
DEBUG: ow_transaction.c:(98) compare = 1
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(82) Clearing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
DEBUG: ow_transaction.c:(113) send = 0
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_transaction.c:(131) readin = 0
DEBUG: ow_transaction.c:(98) compare = 1
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00
00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
DEBUG: ow_select.c:(82) Clearing root branch
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
DEBUG: ow_transaction.c:(113) send = 0
DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
DEBUG: ow_transaction.c:(131) readin = 0
DEBUG: ow_transaction.c:(98) compare = 1
CALL: ow_parsename.c:(102) path=[/bus.0]
DEBUG: dir.c:(57) owserver Calling dir=/bus.0
DEBUG: to_client.c:(76) payload=7 size=6, ret=0, sg=0x10A offset=0
DEBUG: ow_parsename.c:(61) /bus.0
CALL: ow_parsename.c:(102) path=[/uncached]
DEBUG: dir.c:(57) owserver Calling dir=/uncached
DEBUG: to_client.c:(76) payload=10 size=9, ret=0, sg=0x10A offset=0
DEBUG: ow_parsename.c:(61) /uncached
CALL: ow_parsename.c:(102) path=[/settings]
DEBUG: dir.c:(57) owserver Calling dir=/settings
DEBUG: to_client.c:(76) payload=10 size=9, ret=0, sg=0x10A offset=0
DEBUG: ow_parsename.c:(61) /settings
CALL: ow_parsename.c:(102) path=[/system]
DEBUG: dir.c:(57) owserver Calling dir=/system
DEBUG: to_client.c:(76) payload=8 size=7, ret=0, sg=0x10A offset=0
DEBUG: ow_parsename.c:(61) /system
CALL: ow_parsename.c:(102) path=[/statistics]
DEBUG: dir.c:(57) owserver Calling dir=/statistics
DEBUG: to_client.c:(76) payload=12 size=11, ret=0, sg=0x10A offset=0
DEBUG: ow_parsename.c:(61) /statistics
CALL: ow_parsename.c:(102) path=[/structure]
DEBUG: dir.c:(57) owserver Calling dir=/structure
DEBUG: to_client.c:(76) payload=11 size=10, ret=0, sg=0x10A offset=0
DEBUG: ow_parsename.c:(61) /structure
DEBUG: ow_dir.c:(197) ret=-5
DEBUG: ow_parsename.c:(61) /
DEBUG: data.c:(194) DataHandler: FS_ParsedName_destroy done
DEBUG: data.c:(208) DataHandler: cm.ret=-5
DEBUG: to_client.c:(76) payload=0 size=0, ret=-5, sg=0x10A offset=0
DEBUG: to_client.c:(85) No data
DEBUG: data.c:(227) Finished with client request
DEBUG: handler.c:(135) OWSERVER handler done
DEBUG: ow_net_server.c:(238) Normal exit.
On 4/30/14 11:15 , Johan Ström wrote:
Hi,
big up for git.. :)
Compiles fine on FreeBSD now, without any extra patches! Haven't tried
to use it yet though. If it works OK I will probably submit the owfs
port to the ports system.
/Johan
On 4/30/14 02:35 , Paul Alfille wrote:
Release Notes owfs 2.9p4
4/30/2014
New features
1. Switch to git for source management
Still hosted on sourceforge.net <http://sourceforge.net>
git clone git://git.code.sf.net/p/owfs/code
<http://git.code.sf.net/p/owfs/code> owfs-code
cvs history brought over.
2. Clean and test DS2409 (Microlan) hubs
Addressing problem found by Ors Tiszay
Works well with passive devices
Problems with powered slaves, but probably not a software issue.
3. Improved and tested owserver protocol for server-to-server
communication
Use md5 hash for unique token
Fixed byte counting issue in write messages
Null-terminated string no longer required in path string
(problem pointed out by Stefano Miccoli)
4. Added /system/configuration/version
Reports owserver version
Request from Stefano Miccoli
Fixes
1. Double initialization of mutex fixed
Show stopper in FreeBSD
Found by Johan Strom
------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos. Get
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Owfs-developers mailing list
Owfs-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/owfs-developers