tomwalters@570: TODO: tomwalters@570: tomwalters@570: - consider adding the local endpoint name to PacketListener::PacketReceived() params tomwalters@570: tomwalters@570: - consider adding ListenerThread class to support old seperate thread listener functionality, something like: tomwalters@570: tomwalters@570: class UdpSocketListenerThread{ tomwalters@570: public: tomwalters@570: UdpSocketListenerThread( UdpSocket& socket, Listener *listener ); tomwalters@570: UdpSocketListenerThread( UdpSocketReceiveMultiplexer *mux ); tomwalters@570: ~UdpSocketListenerThread(); tomwalters@570: tomwalters@570: void Run(); tomwalters@570: void Stop(); tomwalters@570: }; tomwalters@570: tomwalters@570: - provide some kind of automatic endianness configuration (hopefully there tomwalters@570: are gcc symbols for this) tomwalters@570: tomwalters@570: - work out a way to make the parsing classes totally safe. at a minimum this tomwalters@570: means adding functions to test for invalid float/doublevalues, tomwalters@570: making sure the iterators never pass the end of the message, ... tomwalters@570: (passing end of message can happen if: tomwalters@570: - too many args in type tags tomwalters@570: a. typetags overflow message size tomwalters@570: b. args fulfilling typetags overflow message size tomwalters@570: - strings too long or not terminated correctly tomwalters@570: - blobs too long or not terminated correctly tomwalters@570: tomwalters@570: if the message was fully checked during construction, the end() iterator tomwalters@570: could be moved back until only arguments which fit withing size() may tomwalters@570: be interated (this could be none). A flag could be set to indicate that tomwalters@570: something was wrong. tomwalters@570: tomwalters@570: - other packet badness could include: tomwalters@570: - time tags too far into the future (the scheduler should deal with tomwalters@570: that i guess). tomwalters@570: - message address patterns which aren't correctly terminated tomwalters@570: tomwalters@570: - improve the ability to parse messages without tags (SC uses methods which tomwalters@570: get the data and advance the iterator in one step.) tomwalters@570: - Check* could be modified to do this - ie if typetags are not present tomwalters@570: it could check that reading the field won't escape the message size tomwalters@570: and return the data, or return false if some consistency tomwalters@570: constraint is violated. tomwalters@570: (or alternately drop support for messages without type tags) tomwalters@570: tomwalters@570: tomwalters@570: - add a method to discard an inprogress message if it gets half tomwalters@570: constructed and the buffer is full in OutboundPacket tomwalters@570: tomwalters@570: - write a stress testing app which can send garbage packets to try to flush out other bugs in the parsing code. tomwalters@570: tomwalters@570: tomwalters@570: