File

spec/scansion/basic_message.scs @ 12593:1832b6c9c6ed 0.12

mod_bookmarks: Reduce error about not having bookmarks to debug (thanks tom) This is happens if the account is new and doesn't have any bookmarks yet, which is not a problem. Rarely seen since most clients currently use the older version of XEP-0084 stored in XEP-0049 rather than in PEP, but at least one (Converse.js )does. One scenario in which this would show up often is with Converse.js as a guest chat using anonymous authentication, where all "accounts" would always be new and not have any bookmarks. This scenario probably does not need to have mod_bookmarks at all, but if enabled globally it would likely become loaded onto the VirtualHost unless explicitly disabled.
author Kim Alvefur <zash@zash.se>
date Tue, 26 Jul 2022 23:44:33 +0200
parent 10515:35bf3b80480f
line wrap: on
line source

# Basic message routing and delivery

[Client] Romeo
	jid: user@localhost
	password: password

[Client] Juliet
	jid: juliet@localhost
	password: password

[Client] Juliet's phone
	jid: juliet@localhost
	password: password
	resource: mobile

---------

# Act 1, scene 1
# The clients connect

Romeo connects

Juliet connects

Juliet's phone connects

# Romeo publishes his presence. Juliet has not, and so does not receive presence.

Romeo sends:
	<presence/>

Romeo receives:
	<presence from="${Romeo's full JID}" />

# Romeo sends a message to Juliet's full JID

Romeo sends:
	<message to="${Juliet's full JID}" type="chat">
		<body>Hello Juliet!</body>
	</message>

Juliet receives:
	<message to="${Juliet's full JID}" from="${Romeo's full JID}" type="chat">
		<body>Hello Juliet!</body>
	</message>

# Romeo sends a message to Juliet's phone

Romeo sends:
	<message to="${Juliet's phone's full JID}" type="chat">
		<body>Hello Juliet, on your phone.</body>
	</message>

Juliet's phone receives:
	<message to="${Juliet's phone's full JID}" from="${Romeo's full JID}" type="chat">
		<body>Hello Juliet, on your phone.</body>
	</message>

# Scene 2
# This requires the server to support offline messages (which is optional).

# Romeo sends a message to Juliet's bare JID. This is not immediately delivered, as she
# has not published presence on either of her resources.

Romeo sends:
	<message to="juliet@localhost" type="chat">
		<body>Hello Juliet, are you there?</body>
	</message>

# Juliet sends presence on her phone, and should receive the message there

Juliet's phone sends:
	<presence/>

Juliet's phone receives:
	<presence/>

Juliet's phone receives:
	<message from="${Romeo's full JID}" type="chat">
		<body>Hello Juliet, are you there?</body>
		<delay xmlns='urn:xmpp:delay' from='localhost' stamp='{scansion:any}' />
	</message>

# Romeo sends another bare-JID message, it should be delivered
# instantly to Juliet's phone

Romeo sends:
	<message to="juliet@localhost" type="chat">
		<body>Oh, hi!</body>
	</message>

Juliet's phone receives:
	<message from="${Romeo's full JID}" type="chat">
		<body>Oh, hi!</body>
	</message>

# Juliet's laptop goes online, but with a negative priority

Juliet sends:
	<presence>
		<priority>-1</priority>
	</presence>

Juliet receives:
	<presence from="${Juliet's full JID}">
		<priority>-1</priority>
	</presence>

Juliet's phone receives:
	<presence from="${Juliet's full JID}">
		<priority>-1</priority>
	</presence>

# Again, Romeo sends a message to her bare JID, but it should
# only get delivered to her phone:

Romeo sends:
	<message to="juliet@localhost" type="chat">
		<body>How are you?</body>
	</message>

Juliet's phone receives:
	<message from="${Romeo's full JID}" type="chat">
		<body>How are you?</body>
	</message>

# Romeo sends direct to Juliet's full JID, and she should receive it

Romeo sends:
	<message to="${Juliet's full JID}" type="chat">
		<body>Are you hiding?</body>
	</message>

Juliet receives:
	<message from="${Romeo's full JID}" type="chat">
		<body>Are you hiding?</body>
	</message>

# Juliet publishes non-negative presence

Juliet sends:
	<presence/>

Juliet receives:
	<presence from="${Juliet's full JID}"/>

Juliet's phone receives:
	<presence from="${Juliet's full JID}"/>

# And now Romeo's bare JID messages get delivered to both resources
# (server behaviour may vary here)

Romeo sends:
	<message to="juliet@localhost" type="chat">
		<body>There!</body>
	</message>

Juliet receives:
	<message from="${Romeo's full JID}" type="chat">
		<body>There!</body>
	</message>

Juliet's phone receives:
	<message from="${Romeo's full JID}" type="chat">
		<body>There!</body>
	</message>

# The End

Romeo disconnects

Juliet disconnects

Juliet's phone disconnects