This directory contains an IM address editor tab page for the KAddressbook address manager.  This widget currently stores addresses in the form used by Kopete, but in doing so, I don't make any representation that this is the best way to do it.

Caveat:
A hardcoded set of protocols is used - others are ignored.

The Kopete format:

Application: "messaging/" protocol-name
protocol-name = "aim" / "gadu" / "xmpp" /
				"icq" / "irc" / "msn" /
				"sms" / "yahoo" 
; Note hardcoded set of protocols supported, this is not good

Key:      "All" ; because this information is intended to be writable by allIM apps

value      =  im-address *( Unicode E000, im-address )

The 'IM Address' widget already present in KAddressbook stores IM Addresses in a KAddressbook custom field of the form 

Application = "KADDRESSBOOK"
Key = "X-IMAddress"
Value = im-address

The handling of this field doesn't allow for more than one IM address to be stored, and so isn't sufficient for observed IM address storage.

A (current at Apr 2004) IETF draft covering this topic exists at:
http://www.employees.org/~fluffy/ietf/draft-jennings-impp-vcard-02.html
http://www.ietf.org/internet-drafts/draft-jennings-impp-vcard-02.txt

A previous, less complete draft was
draft-stracke-impp-presence-vcard-00.txt but this seems to have expired.  It can be found at http://www.imppwg.org/ml-archive/IMPP-WG/199911/msg00343.html

Evolution uses another custom field solution to record addresses - the number of addresses stored is limited to 3.  See evolution-data-server/addressbook/libebook/e-contact.h|c, e-vcard.h|c.  The vcard writing code is in e-vard.c : e_vcard_to_string_vcard_30().
