[Telepathy] Requestotron use-cases, part 5 (more requests)

Simon McVittie simon.mcvittie at collabora.co.uk
Thu Jun 5 06:34:41 PDT 2008


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tue, 29 Apr 2008 at 17:31:22 +0100, Simon McVittie wrote:
> HTML at <http://people.collabora.co.uk/~smcv/request.html>, Darcs branch
> at <http://monkey.collabora.co.uk/tp-spec-smcv-usecases> (it's written
> in reStructuredText), current text later in this email for easy quoting.

I've now merged the first 4 batches of use cases into the main
telepathy-spec repository, and I'm about to do the same with some more.

We've also been thinking about the implementation, which is starting to
take shape in telepathy-spec branches on Merge Monkey. All comments
welcome.

Here are some more request use-cases from the mailing list and from further
discussion. More dispatch use-cases (part 6) will follow in a moment.

diff -rN -u -p old-tmppMZkwt/doc/request.txt new-tmppMZkwt/doc/request.txt
- --- old-tmppMZkwt/doc/request.txt	2008-06-05 13:41:23.962169888 +0100
+++ new-tmppMZkwt/doc/request.txt	2008-06-05 13:41:23.994171888 +0100
@@ -59,6 +59,65 @@ that may be ongoing.
 Current implementation: impossible, even in protocols supporting
 conversation threads, because the spec can't represent them
 
+_`req26`: Recovering from disconnection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Romeo is talking to Juliet using text chat, but is disconnected due to network
+instability. After reconnecting, he wants to keep using the same window to
+talk to Juliet.
+
+A solution for this use case should work correctly (and result in
+a single channel) if there is a "mid-air collision" with Juliet doing the
+same thing, with Juliet sending messages to Romeo while he is still
+offline (on store-and-forward protocols like XMPP), or with Juliet
+recovering from Romeo's disconnection as per req28_ (on protocols that
+do not allow offline messages).
+
+(Recovering from a connection manager crash is equivalent to this.)
+
+Current implementation: same as req1_
+
+Problems:
+
+* the two conversations are unrelated (Juliet cannot distinguish
+  between this case and req1_)
+
+Sketch of a proposed solution: give both conversations a thread UUID, and
+let the UI provide the same thread UUID when reconnecting
+
+_`req27`: Resuming a conversation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Romeo chooses a past conversation with Juliet in a log browser and wants
+to resume it. (The definition of threading in XMPP expects that this is
+possible.)
+
+This is basically req26_ but for a different reason; I expect that the
+solution can be similar.
+
+Current implementation: same as req2_
+
+Problems: Juliet cannot distinguish between this case and req2_
+
+_`req28`: Recovering from other's disconnection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Juliet is talking to Romeo using text chat when Romeo is disconnected
+due to network instability. The protocol is one that does not
+allow offline messages to be sent, like IRC. After reconnecting, Juliet
+wants to keep using the same window to talk to Romeo.
+
+A solution for this use case should work correctly (and result in
+a single channel) if there is a "mid-air collision" with Romeo doing the
+same thing, or with Romeo recovering from disconnection as per req26_.
+
+(Recovering from a connection manager crash is equivalent to this.)
+
+Current implementation: Juliet's text channel does not close, but
+she cannot send messages. When Romeo reconnects, because of 1-1 chat
+uniqueness, Juliet's client continues to use the same channel and there
+is no disconnection.
+
 Outgoing VoIP call
 ------------------
 
@@ -171,6 +230,53 @@ Current implementation: same as req5_
 
 Problems: same as req5_
 
+_`req29`: Recovering from disconnection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Romeo is talking to Juliet using VoIP, but is disconnected due to network
+instability. After reconnecting, he wants to keep using the same window to
+talk to Juliet.
+
+A solution for this use case should ideally work correctly (and result in
+a single channel) if there is a "mid-air collision" with Juliet doing the
+same thing, or with Juliet recovering from Romeo's disconnection as per
+req30_.
+
+(Recovering from a connection manager crash is equivalent to this.)
+
+Current implementation: same as req4_
+
+Problems:
+
+* the two conversations are unrelated (Juliet cannot distinguish
+  between this case and req4_)
+
+* if Juliet calls Romeo at the same time that Romeo calls Juliet, a
+  collision occurs and both calls probably fail with error BUSY
+
+_`req30`: Recovering from other's disconnection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Juliet is talking to Romeo using VoIP when Romeo is disconnected
+due to network instability. After reconnecting, Juliet
+wants to keep using the same window to talk to Romeo.
+
+A solution for this use case should ideally work correctly (and result in
+a single channel) if there is a "mid-air collision" with Romeo doing the
+same thing, or with Romeo recovering from disconnection as per req29_.
+
+(Recovering from a connection manager crash is equivalent to this.)
+
+Current implementation: same as req4_
+
+Problems:
+
+* the two conversations are unrelated (Romeo cannot distinguish
+  between this case and req4_)
+
+* if Juliet calls Romeo at the same time that Romeo calls Juliet, a
+  collision occurs and both calls probably fail with error BUSY
+
 Joining a named chatroom by request
 -----------------------------------
 
@@ -327,6 +433,71 @@ Problems:
 * Determining whether we already have a channel to Juliet becomes harder
   than in req1_
 
+_`req31`: Recovering from disconnection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Romeo is talking to Juliet using text chat, but is disconnected due to network
+instability. After reconnecting, he wants to keep using the same window to
+talk to Juliet.
+
+A solution for this use case should work correctly (and result in
+a single channel) if there is a "mid-air collision" with Juliet doing the
+same thing, with Juliet sending messages to Romeo while he is still
+offline (on store-and-forward protocols like XMPP), or with Juliet
+recovering from Romeo's disconnection as per req33_ (on protocols that
+do not allow offline messages).
+
+(Recovering from a connection manager crash is equivalent to this.)
+
+Current implementation: same as req13_
+
+Problems:
+
+* the two conversations are unrelated (Juliet cannot distinguish
+  between this case and req13_)
+
+* A mid-air collision is highly likely to result in two parallel
+  conversations with the same members (if this is even allowed by the
+  protocol)
+
+* the interaction with offline messages is quite scary
+
+_`req32`: Resuming a conversation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Romeo chooses a past conversation with Juliet in a log browser and wants
+to resume it. (The definition of threading in XMPP expects that this is
+possible.)
+
+This is basically req31_ but for a different reason; I expect that the
+solution can be similar.
+
+Current implementation: same as req13_
+
+Problems: Juliet cannot distinguish between this case and req13_
+
+_`req33`: Recovering from other's disconnection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Juliet is talking to Romeo using text chat when Romeo is disconnected
+due to network instability. The protocol is one that does not
+allow offline messages to be sent, like IRC. After reconnecting, Juliet
+wants to keep using the same window to talk to Romeo.
+
+A solution for this use case should work correctly (and result in
+a single channel) if there is a "mid-air collision" with Romeo doing the
+same thing, or with Romeo recovering from disconnection as per req31_.
+
+(Recovering from a connection manager crash is equivalent to this.)
+
+Current implementation: unclear
+
+Problems:
+
+* A mid-air collision is highly likely to result in two parallel
+  conversations with the same members (if this is even allowed by the
+  protocol)
+
 _`req14`: Ad-hoc chatroom from chat UI
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -533,5 +704,54 @@ _`req25`: Existing UDP/TCP client/server
 Romeo offers Mercutio and Benvolio access to an OpenArena server running
 on his local computer.
 
+Failures and other exceptional cases
+------------------------------------
+
+_`req34`: failing to send a text message
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Romeo opens a text channel to Juliet to send a message, but Juliet's server
+is down and Romeo's server signals failure. (This is mostly applicable to
+decentralized protocols like XMPP and SIP.)
+
+Current implementation::
+
+    the message is sent
+    SendError (and soon DeliveryReporting) report the failure
+    the channel remains open
+
+_`req35`: failing to make a call
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Romeo makes a VoIP call to Juliet, but Juliet's server crashes and failure
+is signalled.
+
+Current implementation::
+
+    Juliet is removed from the Group interface, with an error for the reason
+    the StreamedMedia channel closes
+
+_`req36`: Cancelling outgoing call
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Juliet starts a VoIP call to Tybalt, but then thinks better of it and
+cancels the call before the channel has actually been opened.
+
+Current implementation (NMC 4.x)::
+
+    UI calls mission_control_cancel_channel_request()
+
+    if dispatching of the channel has already begun:
+        cancellation succeeds
+    else:
+        cancellation fails
+        the UI is asked to handle the channel
+
+Problems:
+
+* In NMC 4.x the UI cannot distinguish between the channel that it no longer
+  cares about and should close/refuse (this use case), and a channel requested
+  by another process but handled by it (req5_)
+
 ..
   vim:set sw=4 sts=4 et:
-----BEGIN PGP SIGNATURE-----

iD8DBQFIR+toWSc8zVUw7HYRAnqAAJ0WF587tgKe8nOWtMOcpaktDbtU8wCeI8ML
XjtFhIzYUEoQsFIPguuvo+s=
=bjmg
-----END PGP SIGNATURE-----


More information about the Telepathy mailing list