Rambling/rubber-duck-debugging ahead, again.
I have AURP on the brain. I've tried to get through the spec before and was only met with an overwhelming sense that I'd rather be doing anything else, but lately the gears have started to turn a little. It's not hard to imagine how I'd rig up a mechanism for RoutingTable and ZoneInformationTable to let an entity subscribe to their changes - this instead of the rather redundant and silly RTMP/ZIP-to-AURP translation layer that the AURP spec suggests - which makes the whole affair seem more possible than it has in the past. The question I'm facing now is, oddly, how to organize it? TashRouter has the concept of Services, which are usually-threaded entities optionally with a DDP socket number that the Router will deliver Datagrams to when they come in with that destination socket number... but those are AppleTalk specific (maybe they should be renamed AppleTalkServices?), so AURP doesn't belong there. TashRouter also has the concept of Ports, which are hierarchically-organized, like Port > AppleTalkPort > LocalTalkPort > TashTalkPort, with each layer adding reusable functionality along the way, but AURP isn't really a port type, it's a concept used by multiple disparate port types. It can, for example, be used as the routing protocol for AppleTalk over PPP, but that's just one among many; it can also be used over UDP/IP, which is, if I'm not mistaken, what GlobalTalk uses, and given how open-ended the spec seems to be, it wouldn't surprise me to learn it can go over IPX, NetBIOS, IrDA, and carrier pigeon, too. So where in the code does it belong? Do I just throw my hands up and drop it in the root directory along with Datagram? I'm thinking about it...
Maybe there are three hard problems in computer science: cache invalidation, naming things, organizing things, and off-by-one errors...