XMPP to SIP transport interface

An inbound SIP URI:

     from sip:user1@domain1 to sip:user2*domain2@gateway_domain

is translated to an XMPP JID:

     from user1*domain1@xmpp_domain to user2@domain2

An inbound XMPP JID (uri):

     from user1@domain1 to user2*domain2@xmpp_domain

is translated to a SIP URI:

     from sip:user1*domain1@gateway_domain to sip:user2@domain2

Where '*' is the domain_separator, and gateway_domain and xmpp_domain are defined below.

2-way dialback sequence with xmppd2:

 *
 *  Originating server (us)         Receiving server (them)      Authoritative server (us)
 *  -----------------------         -----------------------      -------------------------
 *           |                               |                               |
 *           |    establish connection       |                               |
 *           |------------------------------>|                               |
 *           |    send stream header         |                               |
 *           |------------------------------>|                               |
 *           |    send stream header         |                               |
 *           |<------------------------------|                               |
 *           |    send db:result request     |                               |
 *           |------------------------------>|                               |
 *                                           |    establish connection       |
 *                                           |------------------------------>|
 *                                           |    send stream header         |
 *                                           |------------------------------>|
 *                                           |    send stream header         |
 *                                           |<------------------------------|
 *                                           |    send db:result request     |
 *                                           |------------------------------>|
 *           |    send db:verify request     |
 *           |------------------------------>|
 *           |    send db:verify response    |
 *           |<------------------------------|
 *                                           |    send db:result response    |
 *                                           |------------------------------>|
 *                                           |    send db:verify request     |
 *                                           |<------------------------------|
 *                                           |    send db:verify response    |
 *                                           |------------------------------>|
 *           |    send db:result response    |
 *           |<------------------------------|
 *           :                               :                               :
 *           :                               :                               :
 *           |    outgoing <message/>        |                               :
 *           |------------------------------>|                               :
 *                                           |    incoming <message/>        |
 *                                           |------------------------------>|
 *

Note: Dialback is an old mechanism that is now replaced by TLS connections in "modern" XMPP servers. With TLS, dialback is not used.