Hi,

  While refactoring the connection management code in telepaty-salut, we came
  accross some issues that we like to clear up.

  First we'd like to add to section 7 (Initiating a Messaging Session):

  After the recipient sent <stream:features> to the iniator, it MUST wait for
  the initiator to send a stanza before sending any other stanza's over the
  connection.

  Rationale: It might be the case that the initiator wants to negotiate for
  example an encrypted/secure session after receiving the <stream:features>. If 
  the recipient would start sending stanza's immediately, then at least some
  stanzas would go over the link unencrypted and probably confuse the
  initiators negotiation process.

  Waiting on the initiator to send the first stanza would make it immediately
  clear whether or not it wants to do further negotiations.


  The other thing i want to add is that there should be only _one_ tcp
  connection between two contacts. Mainly to ensure that client implementation
  don't have to cope with multiple connection and possibly weird semantics as a
  result.

  First if someone initiates a connection while there is already one, the
  recepient MUST send a <stream:error /> with conflict as error condition
  instead of sending <stream:features />.  Thus for example:
    <stream:error>
      <conflict xmlns='urn:ietf:params:xml:ns:xmpp-streams' />
    </stream:error>

  Now with correct implementations this should only happen if both contacts
  start connecting to each-other at same time. To break the contention here,
  _only_ on the connection where the initiators jid is lexicographical smaller
  the recipient MUST send a <stream:error>.

  In a simple example: If [EMAIL PROTECTED] and [EMAIL PROTECTED] open a 
connection to
  eachother at the same time. Then the connection that juliet initiated to
  romeo should get a <stream:error /> and gets dropped, while the connection
  from romeo to juliet continues normally.

  As a side node. Implemenations should take care to also implement this
  properly when a existing tcp stream is closing. Thus they shouldn't open new
  connection untill either both sides have sent </stream:stream> or the tcp
  connection is dropped.

  Comments ?

  Sjoerd
-- 
Science may someday discover what faith has always known.

Reply via email to