These pages document the classes and functions KMess is build from. The documentation also provides insight in the relation and interaction between classes, reasons behind a certain implementation, and aids developers to determine how code can be written. Because KMess is built on top of the KDE and Qt libraries, it's important to have a general understanding of the KDE and Qt libraries too:
Parts of the protocol are being documentated in a wiki-style site at: http://msnpiki.msnfanatic.com/ Other sites scattered arround the net also provide documentation about specialized parts of the protocol. These sites are listed at our development page, but hopefully this information will be merged with the msnpiki documentation soon.
To monitor the data exchanged between clients and servers, we use network sniffers (Ethereal). The debugging tools also help to see the exchanged data.
kdWarning()
) when received data can't be processed correctly.The code is filled with assertion tests and strict validations of the data being parsed. This is required to verify whether the application communicates with the servers as it should. For example, an 'if-else-if' always ends with a final 'else' to trap unforceen situations. The P2P classes contain lots of code to detect the exact message type received. Whenever possible, try to reproduce errors to test the code throughly.
To prevent crashes in unexpected situations, tests are added to detect null-pointers and warn appropriately. As rule of thumb:
kdDebug()
.kdWarning()
.if(KMESS_NULL(..)) return;
.
When KMess is compiled in debug mode, the debug code between the #ifdef KMESSTEST
and #ifdef KMESSDEBUG_...
statements will be compiled. The macros for these statements are found in kmessdebug.h. The debug mode can be enabled in two ways:
CXXFLAGS="-g -ansi -pedantic -Wall" ./configure --enable-debug-output --enable-debug=full
.The debug mode adds:
A special KMessTest class can be used to create use-case tests. This class can be activated by both disabling and uncommenting the various lines in main.cpp.