Lately I have been working on Farsight and GTalk. Here are the different components I needed to get it working.
LibjingleP2P I wanted to get gtalk support in there using libjingle. Unfortunatly libjingle came fully loaded with all sorts of stuff I did not need (media engine, signaling). Basically I only wanted the P2P stuff (outgoing STUN, ICE/inline STUN, TURN). So I hacked open libjingle and came up with a p2p only libjingle that can be found here.
icesrc/icesink Next step was getting that P2P Socket to interface with gstreamer. Therefore I wrote 2 elements, icesrc and icesink that can be found here. They connect to those C++ signals on libjingle's P2PSocket and receive/send packets through that socket. Hopefully these elements will be used by jingle upstream to use gstreamer as the default media engine one day instead of linphone. :P
Telepathy gabble I had my own signaling for GTalk thanks to Telepathy's Gabble XMPP connection manager.
voip-engine Next step was to hook up the Signaling from Gabble with Farsight through the d-bus interface and the voip engine. The voip-engine uses the Farsight RTP plugin that takes care of setting up the gstreamer pipeline as well as creating the required libjinglep2p instances.
In the end it actually all worked. The interesting thing is that most of the components mentioned above can be used separately. For example, the modified libjingle can be used to establish any P2P connection for any purpose with a very high sucess rate of traversing NATs (specially if you setup/use a TURN server).