Random notes for working on the Net::OSCAR source: (*NOT* for people merely writing programs which *use* Net::OSCAR!) (This stuff is subject to change without notice.) -If an OSCAR/XML/Protocol.parsed-xml file is available, that will be used instead of Protocol.xml. This is a parsed version of the XML file; I generate this when do a Net::OSCAR release by running the xmlcache script. This way, the user doesn't need to have XML::Parser installed, or the whole expat library. So, if you want to play with Protocol.xml, make sure to remove Protocol.parsed-xml :) -We work with TLVs as hashes which treat their keys as numbers. To get one of these magic hashrefs, call tlv to get a blank one or: tlv(1 => "data", 2 => "other data"). encode_tlv($tlv) before sending it out over the wire. -For things that should usually be a number but should be presented to the user as a string, use dualvar(num, "string"). A lot of the things in OSCAR/Common.pm are dualvars. -Things in OSCAR/Common.pm that are easy to forget to update: EXPORT_TAGS Add something to EXPORT_TAGS all if you add a new thing. Things that should be visible to users of Net::OSCAR also go in EXPORT_TAGS standard. Be careful when naming things that will go in standard, since they'll be imported into the namespace of most programs which use Net::OSCAR. CONNTYPE_FOO Add one of these if you add something that requires a new connection type. Also add it to svcmap in OSCAR/Callbacks.pm. OSCAR_TOOLDATA This probably also needs to get updated if you add a new connection type, or maybe even a new family. BUDTYPES If you're using a new type, in the BLInternal sense of the word, put it in this ugly little array, padding it with "unknown N" if necessary.