This is a client-server caller ID system. Unlike the others I've seen, it uses broadcast UDP packets rather than requiring that the client keep a connection open to the server at all times, or poll. So one little packet can notify all the clients on your entire LAN, simultaneously, that the phone rang, and who it is. The packet happens to be formatted in XML.
Naturally you need a caller-ID-capable modem on your server. But I wanted to be able to use this modem for voicemail and fax too, so I modified the mgetty/sendfax/vgetty program a little, to call my XML-broadcast sender program when the phone rings.
The X client
There are several clients - a command-line one which can call any external program (including xawtv-remote, to display caller ID on your TV display); an X client, which pops up a window each time the phone rings; and a QNX client, rather like the X one, intended for the 3Com Ergo Audrey.
Known problems: the modified mgetty still is a bit slow about calling cidbcast to send the caller-ID broadcast packet. A standalone caller ID box will display the number about 1 ring before these clients will receive it. And, the QNX client seems to die after a while, with some kind of memory error.
About the Audrey: there was already a caller ID program for the Audrey, called ACID. It's pretty cool, but there are two small things I don't like about this program: it requires a TCP connection to remain open for each client, all the time; I prefer broadcast packets to notify multiple clients at once. And, the Audrey's built-in modem seems to create some noise on the phone line, which I can hear on any phone in the house as long as the Audrey is connected. On the other hand ACID has a lot more features than mine, like playing unique sounds for each caller, keeping a log, etc. This caller ID QNX client is much smaller than ACID; the binary is less than 10K.
Probably I will tie it in with NetteBook one of these days. I want to have calls and voicemails logged in that database and linked to the records of the person who called.Well, here's version 0.5 for ya, released as-is under the GNU Public License: