From: Mads K. <ma...@ki...> - 2010-03-26 01:43:28
|
Marc-André Moreau wrote, On 03/26/2010 12:23 AM: > The current code uses different hacks to figure out where to dispatch > the packet once received. For instance, a TPKT header starts with a > one-byte field called "Version". That field is extracted and then used > to check if it's a valid TPKT header (version should be 3). But then > this field is stored in a variable "rdpVer" which is used in other > parts of the program to take other decisions. If it's not a valid TPKT > header you also have a piece of a code that starts digging further the > packet to extract a "length" field from an ASN.1 encoded packet... > it's not hard to see that some cleaning is required in that part of > the code, and it is absolutely essential to refactor it in order to > implement TLS + NLA. Please see my "More correct parsing of Server Redirection Packet" which also needed and did some cleanups in this area. I tend to think that the current implementation is more layered than the RDP protocol is, and thus we don't get the usual benefits of structured and layered code. It is for example odd that rdpver handling lives in secure.c. Perhaps secure.c should be a utility library and not a layer trying to hide mcs. /Mads |