Introduction
Since version 2.0 all data transfers go via the P2P protocol. The old style data transfer is no longer supported. This means that very old clients may not be able to send you files, or receive files. However, most people today are using clients that are capable of sending and receiving data through this framework.
MSNSLP and P2P
The P2P protocol is a binary transport protocol. This means that it makes sure data is properly disassembled and assembled on each side. This however is all handled by the DotMSN library transparently. The main classes that implement this functionality are P2PMessage, P2PDataMessage, P2PMessageSession, P2PTransferSession and P2PHandler. P2P messages can be send via the MSN network or via a direct connect.
MSNSLP is a text-based protocol to negotiate transfers between two msn clients. These MSNSLP messages are send by using the P2P framework. Remember that P2P is a transport protocol, it does not implement any application-specific functionality. Once the transfer has been negotiated and accepted the data is send over the same P2P framework. The most important classes that implement the functionality are MSNSLPHandler, MSNSLPMessage and MSNSLPTransferProperties.
The P2P framework itself does not support any knowledge of how to negotiate a direct connection. This is handled by MSNSLP. The capabilities of each client are request (either direct-connected or firewalled) and based on these information a direct connection is setup or not. Note that for the application it does not matter whether the P2P messages are send over a direct connection or via a server: the interface remains the same. Ofcourse a direct-connection can transfer data much faster and is always the preferable option.
