Tuesday, September 18, 2007

Presence and UDP Holepunching problems..

Hello!

It has been a while, but now we have to write again, so dont miss out anythihng.
Today we have implemented the presence (XEP-115) that are needed to show that a client have voice capabilities. It was not that easy that it seems. We needed to have two lists to order and to keep into place. This is because you can have more than one client connected with different resources and different presence states.
Until now we have implemented this and have not taken priority into any regards. Maybe we have to look into this later, because if you have two clients: one with "available" and one with "away". As it is now it "hopefully will be routed to the available one.

We also have to loook into presence when we are talking voice to each other. Maybe we should signal out a busy signal (it could be nice to have). XEP-167 also descripes the SDP (session description protocol). We SHOULD also implement this, so we can refuse a voice session and present it nicely to the user.

BTW: we set the service discovery (XEP-030) to make our client voice-aware (xep-166, xep-167 name space). It does not seem like that gtalk are using these. It might (and probably does) use some of their own name space. But for now we cant find out what they are using. And in the XMPP standards they are writing that presence is more useful than the service discovery. So for now we have implemented xep-030 for xmpp and is using the precence oriented way of showing our voice service.


UDP Hole punching is problem right now. We have made STUN discovery of our own public IP and port and it works out fine after a couple of small hacks in their core stun.c.
But now we need to use these public endpoints to send out UDP fake packages to the different candidates and to punch hole with several UDP packages. After this we will return the actual socket file descriptor from the session and give it to the gstreamer voice_server.c. And right now it is the latter that does not work.
More investigation for parameters for GST is neeeded.

Tuesday, September 04, 2007

More STUN..

For now, we are able to get the public IP and the public port. The public port was not easily harvested through the pidgin API, so we had to hack the stun.c and stun.h for altering the structure and the method for retrieving these.

At the same time we also found out that we are not able to punch hole through our NATs and therefore the API is probably not have this functionality. We have to implement this ourselves. We found some good reading about UDP hole punching which is a technique that allows traversing NATs. Locally our code is working fine. Though still some comparing neeeds to be done, so we are able to see is the peers are locally available or not.

We also did some near implementation of candidates, so our voice code takes candidates as parameteres instead of alot of diffrent parameters such as ipaddr, port etc. We also made a implementation so that we can contain two different list in the voicenode structure: local_candidates and peer_candidates. This need also to be done for the payload!

Also we did a milestone document.