'Publish alternative addresses where the user can be reached.
Arguments:
addresses -- A list of dictionaries containing the URI and
optional description for each address.
options   -- Optional form of publish options.
ifrom     -- Specify the sender\'s JID.
block     -- Specify if the send call will block until a response
is received, or a timeout occurs. Defaults to True.
timeout   -- The length of time (in seconds) to wait for a response
before exiting the send call if blocking is used.
Defaults to sleekxmpp.xmlstream.RESPONSE_TIMEOUT
callback  -- Optional reference to a stream handler function. Will
be executed when a reply stanza is received.'

def publish_reachability(self, addresses, options=None, ifrom=None, block=True, callback=None, timeout=None):

    if (not isinstance(addresses, (list, tuple))):
        addresses = [addresses]
    reach = Reachability()
    for address in addresses:
        if (not hasattr(address, 'items')):
            address = {'uri': address}
        addr = stanza.Address()
        for (key, val) in address.items():
            addr[key] = val
        reach.append(addr)
    return self.xmpp['xep_0163'].publish(reach, node=Reachability.namespace, options=options, ifrom=ifrom, block=block, callback=callback, timeout=timeout)
