summary refs log tree commit diff
path: root/docs/specification.rst
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <paul@matrix.org>2014-09-12 17:20:06 +0100
committerPaul "LeoNerd" Evans <paul@matrix.org>2014-09-12 17:20:06 +0100
commit1c51c8ab7d331f6be3a8fd14d6d1a40e0a2d3c29 (patch)
tree74528065c199aa426611c41a1351f54e35fa3f3a /docs/specification.rst
parentInitial hack at some RoomMemberStore unit tests (diff)
parentMake the state resolution use actual power levels rather than taking them fro... (diff)
downloadsynapse-1c51c8ab7d331f6be3a8fd14d6d1a40e0a2d3c29.tar.xz
Merge remote-tracking branch 'origin/develop' into test-sqlite-memory
Conflicts:
	synapse/storage/pdu.py
Diffstat (limited to 'docs/specification.rst')
-rw-r--r--docs/specification.rst28
1 files changed, 27 insertions, 1 deletions
diff --git a/docs/specification.rst b/docs/specification.rst
index b15792c00d..aad200c04d 100644
--- a/docs/specification.rst
+++ b/docs/specification.rst
@@ -1249,7 +1249,33 @@ Or a rejected call:
                  <------- m.call.hangup
 
 Calls are negotiated according to the WebRTC specification.
- 
+
+
+Glare
+-----
+This specification aims to address the problem of two users calling each other
+at roughly the same time and their invites crossing on the wire. It is a far
+better experience for the users if their calls are connected if it is clear
+that their intention is to set up a call with one another.
+
+In Matrix, calls are to rooms rather than users (even if those rooms may only
+contain one other user) so we consider calls which are to the same room.
+
+The rules for dealing with such a situation are as follows:
+
+ - If an invite to a room is received whilst the client is preparing to send an
+   invite to the same room, the client should cancel its outgoing call and
+   instead automatically accept the incoming call on behalf of the user.
+ - If an invite to a room is received after the client has sent an invite to the
+   same room and is waiting for a response, the client should perform a
+   lexicographical comparison of the call IDs of the two calls and use the
+   lesser of the two calls, aborting the greater. If the incoming call is the
+   lesser, the client should accept this call on behalf of the user.
+
+The call setup should appear seamless to the user as if they had simply placed
+a call and the other party had accepted. Thusly, any media stream that had been
+setup for use on a call should be transferred and used for the call that
+replaces it.
  
 Profiles
 ========