On 6/16/14 04:54, ale...@mozilla.com wrote:
Returning the issuer as part of the 302 on GET /call/{token} [0]
================================================

     This is not compatible with the fact we try to not do a 302 anymore [1] in 
order to a) avoid a roundtrip b) have urls such as http://call.mozilla.com 
directly.

If we do use the fragment portion of the URL to send back information
(and we don't do a 302, e.g. we return it directly as a result of POST
/call-url) then anyone will be able to craft the URLs they send to look
like they're issued by anyone else.

One potential way to fix this is to add a GET on /call/{token} to
retrieve information about the call.

Sure, and that was my original design -- I was trying to avoid a second round trip after the 302. But if we're going to be hosting the static assets on the loop server (which I would have preferred from the outset), then adding an explicit GET seems to make the most sense.


GET /calls?version=<version>
========================

     In the flow you're proposing, we're returning two additional fields:
     "callType" and "callerId" (the already mentioned progressURL put
     aside).

     About "callType": to be able to return the callType, we'll need to update the POST 
on /calls/{token} to have an additional parameter "callType". I don't see this anywhere 
in the proposed changes, hence the remark.

Ah, right. I'll fix that.

     About "callerId": we currently don't expose the identity of the users of 
our service to consumers. In other words, the callerId is not currently stored by the 
server. If that's an information we need to disclose to consumers, then it needs the 
server will need to store it, and that's something we tried to avoid until now.

Unfortunately, I don't see a way around it, at least for the duration of call set-up. Once the call is set up, the information can be removed. But we do need a unique, authenticated calling party identity for user-to-user calls; see below.

Also, the UX mockups doesn't actually rely on any MSISDN number / email
address, but just displays a name. Wouldn't it be enough to let the
caller tell who she is?

No; the calling user identity needs to be authenticated. Among other reasons, the identity of the calling user is used to determine whether the called party is willing to even be disturbed by the incoming call: note that the UX mockups include an option to receive calls only from users in your address book. If the identity that shows up isn't unique and authenticated, then this privacy feature is trivially circumvented.

POST /calls/user
=============

     The resource location sounds wrong to me. The action we are trying is to 
start a call, and as such we should be doing a POST on /calls to create a new 
call

I don't care what color this bikeshed is. If you think it's easier/cleaner/whatever without the "user" component, I'm happy removing it.

POST /call-url/{token}
=================

     That's a way to update an existing call url, it should be a using the PUT 
method.

No, not any more than the initial creation of the URL should be PUT. This has side effects that well exceed those that are normally associated with document PUT requests.

I know fernando (from TEF) wanted to avoid the cost of setting up web
socket connections on the client if possible, since we already have a
connection to the push server we could potentially leverage.

In talking to Doug Turner, he's had some concerns about the speed with which push notifications are delivered to the client. For the kinds of rapid-fire messaging we're talking about here, it's almost certainly not up to the task.

I'm a little confused about the concerns regarding short-lived websockets connections from the mobile device: these are just TCP connections, which demonstrably work just fine from mobile devices.

*"progressURL :**WebSockets URL the client needs to connect to in order to complete 
call setup procedure.*"
I believe this description doesn't reflect what the progressURL is. My
understanding is that it's somewhere you can connect to to be notified
about the progress of the setup call.

Sure, I'll clarify this text.

     In the case we'll get more than one call setup at once for a client, it's 
currently not clear to me if the client should setup more than one websocket 
connection (e.g. one per call-setup or one for all of them).

Yes, the intention here is to have one per call. The messaging and connection management becomes far more complicated if we try to combine multiple calls in a single connection; and the gain for this extra cost is virtually zero once you consider how frequently this situation will arise.

  In the former case, we probably should add the callId inside the progressURL.

I'm not sure what this gains you, but I'm not opposed to doing so.

     For the "connecting", "half-connected" and "connected" states, you refer to 
"the media" (media is not yet confirmed), but it's not clear to me what this is specifically. Can you 
elaborate? I don't  understand why this needs to be relayed by the server.

It needs to be relayed by the server because the endpoints don't have any other way to communicate with each other. The point is to supervise call setup to the point that both endpoints are satisfied that the call is established. To have a polished UX, we need this information so that reasonable progress and error information can be rendered to the user.

Offered traffic 0.1 Erlang per subscriber
Is this a typo? I don't understand the meaning.

No, it's not a typo -- it's an estimate of the peak traffic generated on a per subscriber basis. "Erlang" is a unit of voice traffic load (see https://en.wikipedia.org/wiki/Erlang_%28unit%29). Reasonable values for offered traffic are generally in the range of 0.05 to 0.15 Erlang per subscriber (and I suspect ours will be on the lower end of this), so I picked a value somewhere in the middle.

I'm including my assumptions here in case someone with a telecom traffic engineering background wants to double-check my work.


Transition
========

While the (lack thereof) concerns you're raising are valid, it doesn't
seem to make sense to avoid flag days for something that's MLP and only
released in nightly. e.g. in case it breaks, I believe we should just
let it break for now and focus on getting the new APIs right rather than
having backwards compatibility at this stage of the project.


I suppose a large portion of this depends on how quickly the change can be made to the server, and how many users are experimenting with the service at that time. In any case, given how little effort it would be to keep the already issued URLs valid, I see no reason to rip out working code rather than simply moving it behind a length check.

--
Adam Roach
Principal Platform Engineer
a...@mozilla.com
+1 650 903 0800 x863
_______________________________________________
dev-media mailing list
dev-media@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-media

Reply via email to