summaryrefslogtreecommitdiff
path: root/doc/cmcaps.txt
blob: 441ff266009ec898f0bd824bfcb07b88dccafacb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
Use cases for connection manager capabilities
=============================================

.. contents::

Connection manager capabilities indicate what sorts of channel a connection
manager could conceivably satisfy a request for. This is closely related to
`channel requesting`_, and can be used by clients to decide what UI to
present.

.. _channel requesting: request.html

For instance, Empathy's Chat -> New Conversation menu can use this mechanism
to decide what connection managers could conceivably have what features.

Fundamentally, it is a Connection that has or lacks a particular feature.
However, it would be useful for some part of Mission Control (account manager?
channel dispatcher?) to cache "expected" capabilities for unconnected
accounts, or perhaps even be able to guess what capabilities an account will
have before it has ever become connected.

The current proposal is:

* "Classes" of requestable channel are identified by (ChannelType,
  TargetHandleType) pairs

* If TargetHandleType is not NONE then either TargetHandle or TargetID is
  always mandatory, and TargetHandle (if given) is nonzero

* If TargetHandleType is NONE then TargetHandle and TargetID are forbidden

* Other parameters can exist, and can be mandatory or optional; clients MUST
  NOT send parameters that aren't explicitly allowed

Problems with this proposal:

* How do we say that not all "valid" values for a parameter are allowed?
  For instance we might only support a couple of MIME types for file transfer

  * Tentative resolution: we don't, but the request will fail without
    side-effects

* Can there potentially be more than one "class" per pair? Representing this
  in a UI is likely to be hard

  * Tentative resolution: yes, but we'll try to avoid it?

* Would it be useful to indicate what interfaces will/might be supported
  by channels of a given class?

Optional parameters which could hypothetically apply to all channels
--------------------------------------------------------------------

* ...Channel.Bundle
* ...Channel.Interface.Thread.ThreadID
* ...Channel.Interface.TLS.Secure

1-1 text chat
-------------

:ChannelType:
    ...Channel.Type.Text
:TargetHandleType:
    CONTACT
:Mandatory parameters other than TargetHandle:
    none
:Optional parameters not already mentioned:
    none

Chatroom
--------

:ChannelType:
    ...Channel.Type.Text
:TargetHandleType:
    ROOM
:Mandatory parameters other than TargetHandle:
    none
:Optional parameters not already mentioned:
    ...Ch.I.Chatroom.Nickname

1-1 VoIP
--------

:ChannelType:
    ...Channel.Type.StreamedMedia
:TargetHandleType:
    NONE (or CONTACT)
:Mandatory parameters other than TargetHandle:
    none
:Optional parameters not already mentioned:
    none

Mingle
------

:ChannelType:
    ...Channel.Type.StreamedMedia
:TargetHandleType:
    ROOM
:Mandatory parameters other than TargetHandle:
    none
:Optional parameters not already mentioned:
    none

RoomList
--------

:ChannelType:
    ...Channel.Type.Text
:TargetHandleType:
    NONE
:Mandatory parameters:
    none
:Optional parameters not already mentioned:
    none

FileTransfer
------------

:ChannelType:
    ...Channel.Type.FileTransfer
:TargetHandleType:
    CONTACT
:Mandatory parameters other than TargetHandle:
    Varies per connection manager!

    * SuggestedFilename: mandatory in XMPP XEP-0096 and probably others

      * maybe we should make this always mandatory?

    * Size: mandatory in XMPP XEP-0096

      * we plan to make this always mandatory in requests, for reliable
        detection of truncated transfers

    * other protocols?

:Optional parameters not already mentioned:
    * RandomAccess=True? (XEP-0096 byte ranges)
    * Description (XEP-0096)
    * ContentType? (can always avoid making this mandatory by defaulting to
      'application/octet-stream')
    * ContentMD5
    * app-defined metadata? (not possible in all, or possibly any, protocols)

D-Bus, Stream, Packet Tube
--------------------------

Attempt 1
~~~~~~~~~

:ChannelType:
    ...Channel.Type.DBusTube, Ch.T.StreamTube, Ch.T.PacketTube?
    (with ...Channel.Interface.Tube)
:TargetHandleType:
    CONTACT or ROOM
:Mandatory parameters other than TargetHandle:
    Service
    AvailableSocketTypes (the request fails if the channel's available
    (socket, access control type) pairs have empty intersection with
    these)
:Optional parameters not already mentioned:
    TubeParameters (omitted and empty a{sv} are interchangeable)

Attempt 2
~~~~~~~~~

:ChannelType:
    e.g. ...Channel.Type.DBusTube.com.abisource.AbiCollab,
    ...Channel.Type.StreamTube.vnc, ...Channel.Type.PacketTube.openarena
    (with ...Channel.Interface.Tube and possibly also
    ...Channel.Interface.DBusTube etc.)
:TargetHandleType:
    CONTACT or ROOM
:Mandatory parameters other than TargetHandle:
    AvailableSocketTypes as in attempt 1
:Optional parameters not already mentioned:
    as in attempt 1

..
  vim:set sw=4 sts=4 et: