First, it doesn't print attributes from the chained ad.
Second, it doesn't omit private attributes when necessary. It also doesn't encrypt them when appropriate.
Third, it doesn't have the optional addition of the ServerTime attribute.
Fourth, it doesn't convert local IP addresses in attribute values to that of the open socket (using ConvertDefaultIPToSocketIP()).
Fifth, it doesn't emulate AttrList::put(), which doesn't send the MyType and TargetType attributes after the other attributes. There is a standalone function that does this (putOldClassAdNoTypes()). Clarification: putOldClassAdNoTypes() doesn't send the MyType or TargetType after other attributes.
Developer time: 1-2 days.