The chief aim here is to enable people to exchange media files that are in their pocket,
with no explicit interaction at the time.
There are several phases to this:
- having the app see & 'know' your media files
- saying what you, your 'friends' and the general public can see (I'm thinking User, Group, Other is quite enough). It may be enough to just have one class ('other') at first, for simplicity.
- detecting that another device is within range
- exchanging metadata (probably two-way exchange 'do you have?' -> metadata of matching media)
- exchanging the actual data (preferably with graceful restart, but sod that to begin with)
The exchange portion could go something like this:
- Two mobiles meet. Both see each other through local network (wireless, 802.11[a-z]).
- They "who are you?". They exchange some sort of identifying key. SSL with client certificates is a really obvious idea here.
- They each look up the other in their own address book - basically, "does my owner know you and believe you're not into kiddy porn"
- If they both know each other, the next step would be "menu please" aka what do you have available - meta data about stuff and where it's available from
- The magic at this point about figuring out whether it's a good idea to try and download something from the other could be fun and challenging
- But basically, data is transferred in an award winning way
Right, so I'm just going to jot down some state charts or flow diagrams. Was sorta hoping this wiki would understand dot syntax and generate pretty diagrams but that would be moaning just far too soon. (We can make it support .dot files, but I can't seem to find a damn MIME type for them, which is a stumble.)
Other variations and excitements
- What about if there are two phones offering the same desired content. Rateless codes, tornado codes etc etc? Watch patent issues.
- What about if the phone says "I have access to x but it's actually on my home computer. By all means, go get it from there". This boils down to getting the phones to make the TCP 3-way handshake and then your "paired" computers actually do the transfer. This is a pretty useful idea given the intermittent contact phones will have vs computers on the www
- What about if two phone were in range, and started transferring stuff and then moved out of range, but there's a 3rd phone that they both trust (err, not necessarily necessary provided crypto) that they can use as a relay. Can this generally be extended? What about multiple routes? Rateless codes AGAIN! - leads to wireless mesh stuff - should probably look up wtf olpc have been up to wrt this.