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.