[jdev] Gaim and gnomemeeting using jabber
Richard Dobson
richard at dobson-i.net
Thu Dec 2 08:02:43 CST 2004
> I tried it with:
> * patched gaim ;
> * unpatched gaim ;
> * gossip.
>
> My patched gaim didn't seem to give any headache to either of the
> innocent clients...
Not much of a test, if thats all you tested then you cannot really state
that you have tested it and it causes no problems, do those clients even
support JEP-0066 anyway? You need to do a proper test testing all clients
available to be able to say its tested and doesnt cause any problems,
certainly the major ones such as Psi, Exodus, Pandion, Trillian and Gabber.
The problem you will create in any clients that already support URIs in the
format you are trying to use is that they will probably prompt the user
asking them if they want to call you when you log on, which is IMO not a
desirable behaviour.
> Notice that I fail to see the huge security gain between:
> 1) exporting the voip uri right away ;
> 2) exporting the voip feature, and giving the corresponding uri on
> request.
Because only people you are specifically accepting calls from will get the
URI, whereas with your method just about anybody can yet your URI, including
other people in chat rooms, why can you not see that as an obvious huge
difference???, its the difference between giving it to one person and giving
it to 500, thats a huge difference IMO.
> I don't see very well what should go one way and the other ; could you
> write a mockup (like I did to show what the patch I have does)?
Have a look at the bottom of this email.
> Why do I always have the impression that you think having the voip uri
> gives anything to anyone? You know, a typical voip uri is much like a
> jabber uri: it tells you to which server you have to ask for whom ; for
> example: "h323:ils.seconix.com/that.user at you.know" . That doesn't
> generally give you an ip, but just a mean to find it out.
Because they can find it out when they are someone not in a call with you
(i.e. someone you have not specifically accepted a call request from) then
its the same difference as if you had just put the IP right into the URI, I
find this strange that you cannot see this extremely obvious potensially
serious security hole which is very easily mitigated.
> Once you have a voip-uri:
> * your client must ask the server for your ip (and the server can
> refuse!) ;
It could but in my experience such servers do not refuse and just give the
address out to anyone who asks, either that or they just require a logon
which once you have it allows you to get the addresses of anyone on that
server.
> * your client must connect to your voip-client (and you may refuse!).
As I have already explained (and you seemed to agree to), once you have the
IP of the other persons machine the damage is done and no voip client will
protect you against people hacking your machine, a very simple and extremely
effective defence against this is to not just simply broadcast your IP to
everyone and only give it to people when they request to call you, infact
the solution after thinking it through properly for your example means that
you never reveal you ip, only the caller does which is IMO the correct way
around to do it (and even more secure that I have previously mentioned), it
also has the major benefit of not having to have your voip client running to
be able to accept voip call requests via jabber, also the correct way to do
it.
> Yes, a mockup client-client discussion would be nice.
Ok then here you go:
Task 1) Communicating voip capability
---
1) A client requests your disco info
<iq type='get'
from='juliet at capulet.com/balcony'
to='romeo at montague.net/orchard'
id='info1'>
<query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>
2) Your client responds including voip feature in the response
<iq type='result'
from='romeo at montague.net/orchard'
to='juliet at capulet.com/balcony'
id='info1'>
<query xmlns='http://jabber.org/protocol/disco#info'>
<identity
category='client'
type='pc'
name='Exodus'/>
<feature var='http://jabber.org/protocol/disco#info'/>
<feature var='http://jabber.org/protocol/disco#items'/>
<feature var='jabber:iq:time'/>
<feature var='jabber:iq:version'/>
<feature var='http://jabber.org/protocol/voip'/>
</query>
</iq>
Simple as that now other clients know that your client is voip capable.
Task 2) agreeing on voip protocol and communicating uri
---
1) Requesting entity starts voip protocol negotiation, sending a list of
protocols it supports.
<iq type='get'
from='juliet at capulet.com/balcony'
to='romeo at montague.net/orchard'
id='neg1'>
<feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='form'>
<field type='list-single' var='http://jabber.org/protocol/voip'>
<option><value>h323</value></option>
<option><value>sip</value></option>
<option><value>callto</value></option>
</field>
</x>
</feature>
</iq>
2) Responding entity sends preferred values (this is telling the requestor
which uri format to use).
<iq type='result'
id='neg1'
from='romeo at montague.net/orchard'
to='juliet at jabber.org/balcony'>
<feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='submit'>
<field var='http://jabber.org/protocol/voip'>
<value>callto</value>
</field>
</x>
</feature>
</iq>
3) Requesting entity then sends the uri for the responding entity to call
should it wish to, this is far more secure and works in reverse to the way
your scheme does, only the caller reveals their details. It also means voip
calling will work if you do not have your voip client running as if its not
running you can just start it up, whereas with your solution you have to
have it running the whole time, this solution is far more inline with jabber
and is far more likely to work with other clients correctly, and possibly
work with some clients without modification, i.e. some clients already
support callto URIs.
<iq type='set'
from='juliet at jabber.org/balcony'
to='romeo at montague.net/orchard'
id='oob1'>
<query xmlns='jabber:iq:oob'>
<url>callto:192.168.103.77+type=ip</url>
<desc>VoIP call</desc>
</query>
</iq>
4) Recipient Informs Sender of Success.
<iq type='result'
from='romeo at montague.net/orchard'
to='juliet at jabber.org/balcony'
id='oob1'/>
I would highly urge you to implement voip using this method as it is the
most likely method to work correctly and be backwards compatible with other
clients.
Richard
More information about the JDev
mailing list