[Telepathy] Spec meeting: call forwarding, emergency calls, GSM conferences, Location interface network traffic, pre-composed DTMF strings
Will Thompson
will.thompson at collabora.co.uk
Thu Apr 22 09:52:35 PDT 2010
Welcome to the first of what I hope will become a series of increasingly
UK General Election-themed spec meeting notes!
The candidates:
• Simon “smcv” McVittie;
• Sjoerd “sjoerd” Simons;
• Will “wjt” Thompson.
The manifesto:
• Call forwarding;
• ServicePoint interfaces (emergency calls);
• Remote party in GSM changing their side of a call into a conference;
• Unnecessary network traffic due to the Location interface;
• DTMF: pre-composed dial strings;
• Electoral reform.
== Call forwarding ==
https://bugs.freedesktop.org/show_bug.cgi?id=13351
This interface is for specifying forwarding rules if you don't answer a
call, if you're busy, etc etc. For instance, with most mobile phone
operators you can choose to redirect calls to another number (usually
your voicemail) if you don't answer within 30 seconds.
Our consensus was that this interface is the right shape, but some types
are not ideal, poorly named, etc. In particular:
The Forwarding_Rule enum isn't the type of a rule, it's the type of a
condition to apply rules in. So it should be called Forwarding_Condition
or similar.
The ForwardingRules property maps conditions to what to do in those
situations, so it should be a dict not an array. So we get:
ForwardingRules: a{ u — Forwarding_Condition
→ a(uu) — Forwarding_Rule_Entry[]
}
There's ambiguity as to what the timeout in a forwarding rule entry
means. According to the example, it means "the time to take before
redirecting to this handle"; according to the struct definition, it
means "the time to wait for this handle to answer before failing over to
the next rule".
We could bike-shed which way round it should be... In the first case, we
have no way to specify how long to wait for the handle in the last rule
to answer before giving up; in the second case, we have no way to
specify how long to wait for the local user to answer before trying the
first rule. Perhaps we should take the second definition, and change the
type of ForwardingRules further into:
a{ u — Forwarding_Condition
→ ( u — initial timeout,
a( u — handle,
u — timeout for this action
)
)
}
Then for example, the following value of ForwardingRules:
{ Busy: (30 seconds, [ (handle 3, 15 seconds)
, (handle 5, 20 seconds)
]
),
...
}
would mean: “if I'm on another call, keep the call waiting for 30
seconds. If I don't answer the new call, redirect it to handle 3. If
they don't answer within 15 seconds, redirect it to handle 5. Finally,
if they don't answer within 20 seconds, give up.”
We should say what happens if your provider doesn't support call
waiting, but you specify a Busy action with a non-zero time: the time is
ignored.
In ‘a user's status is set to "Don't Bother Me"’, link to simple presence.
0 shouldn't mean default. 0 should mean "immediately", and MAX_UINT32
should be the default. Or something (maybe make it signed so we can use
-1? Maybe introduce maybe types to D-Bus? :þ).
SupportedForwardingRules should be renamed SupportedForwardingConditions.
How would we deal with Busy being handled locally, and NotReachable
being on the server? Specifically: the server may only support one
contact for NotReachable, but the local impl. can support >1. Maybe
SupportedForwardingConditions should be an a{u: Condition → u:
max_count} mapping supported conditions to how supported they are.
Side point: we need an error condition which says "this call ended
because it was forwarded". (Do we want to say to whom?) Add an element
to Call_State_Change_Reason.
How do we represent a call being forwarded immediately? It's easy with
Call: we just announce a channel with the state already set to Ended.
Call channels don't close themselves, so it'll be dispatched as normal.
Hooray! Dancing in the streets, baked treats all round. Maybe we can
clone this pattern onto the Group interface so it can deal with being
booted immediately from a chat room.
== ServicePoint interfaces (emergency calls) ==
https://bugs.freedesktop.org/show_bug.cgi?id=24905
These interfaces deal with indicating that a channel is to an emergency
service — such as 112 in the EU, or 911 in the US — and informing the UI
which numbers correspond to which services on the current connection. A
variant of this interface is implemented by telepathy-ring on Maemo 5;
it could also be used on SIP, or even XMPP in some kind of
utopian/dystopian (depending on your point of view) future.
We also added some comments on the bug during the meeting.
o.f.t.Channel.Interface.ServicePoint:
• GetCurrentService should become two properties [or maybe a single
struct-typed property? -ed.] instead of being a getter method
• For documentation purposes there should be a TpSimpleType for URN
strings, so we can use that as the type for ServicePoint.
• Service_Point_Type 0 should be None instead of Unknown for a dummy value
o.f.t.C.I.ServicePoint:
• ServiceHandle should be ServiceID, No need for it to be handle: the
UI will be dealing with it as an ID anyway
• And/Or AliasList should be ServiceIDs and ServiceHandle should
disappear completely. It wasn't clear to us what the rationale/use-case
for having one ServiceHandle and then a list of aliases is ?
• Simon would like to see a example of Service_Point_Struct in the spec.
• Also Service_Point_Struct should be renamed to Service_Point_Info
== Remote party in GSM changing their side of a call into a conference ==
When your peer in a GSM call makes the call a conference, one can only
know that this has happened but not influence the conference or know who
is in it. Which means that for all practical purposes it's not a
conference usable from our local side. (For instance: Will can call
Simon, Simon can turn his end of the call into a conference with Sjoerd,
and Will can turn his end of the call into a conference with Nick Clegg.
Little to no information is available to each participant on who else is
on the call, besides the fact that a peer confed *someone* in at some
point.)
Given that, we decided that the Conference interface should not be used
for this but we should have a seperate interface (the name SideTalking
was coined) that can indicate a remote party is doing conferencing of
this sort.
This interface would have a property (+ change notification for it )
with a list of people that might have conferenced you in the current call.
== Location Interface ==
Currently Gabble always subscribes to PEP notification for location
services, even if there isn't necessarily a client listening for them.
Currently that's not such a big deal as not many people publish their
location, but were thisto change than it could cause a reasonable amount
of useless traffic
Simon and Sjoerd decided that we should add a a Subscribe and
Unsubscribe method to the Location interface. Use GetLocation (or the
contact attribute) will automagically subscribe your application (and
thus keeping backwards compatibility). RequestLocation will do a
one-time request for a persons location and not thus subscribe to
further change notification.
[Will, who left the room during this section of the discussion in order
to declare the funds he has received to fund a part-time researcher,
wonders while writing these notes up: why do we need explicit
Subscribe() at all?]
== DTMF: pre-composed dial strings ==
https://bugs.freedesktop.org/show_bug.cgi?id=24902
This interface deals with dialing a number, and immediately sending a
series of DTMF events. For instance, you might have a button in your
address book that calls a teleconference service, and then automatically
dials in the conference ID followed by #, waits a few seconds, then
dials the PIN followed by #.
We commented on the bug. In summary:
• We decided we should support both including the dial string as part of
the TargetHandle (eg: "+441234567890p1234#p666#"), and requesting a
channel with { TargetHandle: "+441234567890", InitialTones: "p1234#p666#" }.
• There has been some discussion on the bug about how this works with
protocols like SIP where the dial tones might be sent in the signalling,
and might be sent in the RTP stream, so Farsight needs to get involved.
--
Will
More information about the telepathy
mailing list