Fix connected/connecting semantics
In case a connection is established, but the stream negotiation has not completed yet, a user may think that they can start sending data, but this is not the case. All of the following quotes originate in RFC6120. As of Ch. 8: > After a client and a server (or two servers) have completed stream > negotiation, either party can send XML stanzas. As of Ch. 7.3.1: > The parties to a stream MUST consider resource binding as > mandatory-to-negotiate. As of Ch. 6.3.1: > The parties to a stream MUST consider SASL as mandatory-to-negotiate. As of Ch. 4.3.5: > The initiating entity MUST NOT attempt to send XML stanzas to entities > other than itself (i.e., the client's connected resource or any other > authenticated resource of the client's account) or the server to which > it is connected until stream negotiation has been completed. > Even if the initiating entity does attempt to do so, the receiving > entity MUST NOT accept such stanzas and MUST close the stream with a > <not-authorized/> stream error [...] Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
This commit is contained in:
@@ -83,7 +83,7 @@ void handler_fire_stanza(xmpp_conn_t *conn, xmpp_stanza_t *stanza)
|
||||
while (item) {
|
||||
/* don't fire user handlers until authentication succeeds and
|
||||
and skip newly added handlers */
|
||||
if ((item->user_handler && !conn->authenticated) ||
|
||||
if ((item->user_handler && !conn->stream_negotiation_completed) ||
|
||||
!item->enabled) {
|
||||
item = item->next;
|
||||
continue;
|
||||
@@ -119,7 +119,8 @@ void handler_fire_stanza(xmpp_conn_t *conn, xmpp_stanza_t *stanza)
|
||||
while (item) {
|
||||
/* don't fire user handlers until authentication succeeds and
|
||||
skip newly added handlers */
|
||||
if ((item->user_handler && !conn->authenticated) || !item->enabled) {
|
||||
if ((item->user_handler && !conn->stream_negotiation_completed) ||
|
||||
!item->enabled) {
|
||||
item = item->next;
|
||||
continue;
|
||||
}
|
||||
@@ -177,7 +178,7 @@ uint64_t handler_fire_timed(xmpp_ctx_t *ctx)
|
||||
while (item) {
|
||||
/* don't fire user handlers until authentication succeeds and
|
||||
skip newly added handlers */
|
||||
if ((item->user_handler && !conn->authenticated) ||
|
||||
if ((item->user_handler && !conn->stream_negotiation_completed) ||
|
||||
!item->enabled) {
|
||||
item = item->next;
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user