Libjingle

1. Introduction

Libjingle is a set of components provided by Google to implement Jingle
protocols XEP-166 (http://xmpp.org/extensions/xep-0166.html) and XEP-167
(http://xmpp.org/extensions/xep-0167.html). Libjingle is also backward
compatible with Google Talk Call Signaling
(http://code.google.com/apis/talk/call_signaling.html). This package will
create several static libraries you may link to your projects as needed.

-talk               - No source files in talk/, just these subdirectories
|-base              - Contains basic low-level portable utility functions for
|                     things like threads and sockets
|-p2p               - The P2P stack
  |-base            - Base p2p functionality
  |-client          - Hooks to tie it into XMPP
|-session           - Signaling
  |-phone           - Signaling code specific to making phone calls
    |-testdata      - Samples of RTP voice and video dump
  |-tunnel          - Tunnel session and channel
|-third_party       - Folder for third party libraries
  |-libudev         - Folder containing libudev.h
|-xmllite           - XML parser
|-xmpp              - XMPP engine

In addition, this package contains two examples in talk/examples which
illustrate the basic concepts of how the provided classes work.

2. How to Build

2.1 Prerequisites

Libjingle is built with swtoolkit (http://code.google.com/p/swtoolkit/), which
is a set of extensions to the open-source SCons build tool (www.scons.org).

  * First, install Python 2.4 or later from http://www.python.org/.
    Please note that since swtoolkit only works with Python 2.x, you will
    not be able to use Python 3.x.

    python --version to confirm that python is in your path, and 2.4 or greater.

  * Second, install the stand alone scons-local zip package 2.0.0 or later from
    http://www.scons.org/download.php and set an environment variable,
    SCONS_DIR, to point to the directory containing SCons.
    For example, on Windows, download
    http://sourceforge.net/projects/scons/files/scons-src/2.0.1/scons-local-2.0.1.zip
    Unzip to C:\src\libjingle\scons-local\
    set SCONS_DIR=C:\src\libjingle\scons-local\scons-local-2.0.1

  * Third, install swtoolkit from http://code.google.com/p/swtoolkit/.
    For example, on Windows download
    http://code.google.com/p/swtoolkit/downloads/detail?name=swtoolkit.0.9.1.zip
    Unzip to C:\src
    Optionally add swtoolkit to path.  Otherwise call hammer.bat directly.
    set PATH_TO_SWTOOLKIT=c:\src\swtoolkit
    set PATH=%PATH_TO_SWTOOLKIT%;%PATH%

2.2 libjingle

Libjingle needs to be downloaded and patched

  * First, install Libjingle.  Since this README lives within Libjingle,
    this step is normally already done.
    Libjingle home page is here http://code.google.com/p/libjingle/
    For example, on Windows, download
    http://libjingle.googlecode.com/files/libjingle-0.5.2.zip
    unzip to C:\src\

  * Second, Libjingle depends on two open-source projects, expat and srtp.
    Download expat from http://sourceforge.net/projects/expat/ to
    talk/third_party/expat-2.0.1/. Download srtp at
    http://libjingle.googlecode.com/files/srtp-cvs.zip to
    talk/third_party/srtp. Note that srtp-1.4.4 does not work since it misses
    the extensions used by Libjingle.
    If you put expat or srtp in a different directory, you need to edit
    talk/libjingle.scons correspondingly.
    rename srtp-cvs to srtp
    For example, on Windows, download expat
    http://sourceforge.net/projects/expat/files/expat/2.0.1/expat-2.0.1.tar.gz
    Unzip to C:\src\libjingle-0.5.2\talk\third_party
    Download srtp
    http://libjingle.googlecode.com/files/srtp-cvs.zip
    Unzip to C:\src\libjingle-0.5.2\talk\third_party
    rename C:\src\libjingle-0.5.2\talk\third_party\srtp-cvs srtp

  * Third, on Windows, copy config.h
    copy talk\third_party\srtp\config.hw talk\third_party\srtp\crypto\include\config.h

2.2 Build Libjingle under Linux or OS X
  * First, make sure the SCONS_DIR environment variable is set correctly.
  * Second, run talk/third_party/expat-2.0.1/configure and
    talk/third_party/srtp/configure.
  * Third, go to the talk/ directory and run $path_to_swtoolkit/hammer.sh. Run
    $path_to_swtoolkit/hammer.sh --help for information on how to build for
    different modes.
  * On Linux, you need to install libssl-dev, libasound2-dev and gtk+2.0.

2.3 Build Libjingle under Windows
  * First, make sure the SCONS_DIR environment variable is set correctly and
    Microsoft Visual Studio is installed.
    dir %SCONS_DIR%
    Should show a folder containing Scons\
  * Second, go to the talk\ directory and run %PATH_TO_SWTOOLKIT%\hammer.bat.
    To get help run:
    %PATH_TO_SWTOOLKIT%\hammer.bat --help
    different modes. You can run the last step under Visual Studio Command
    Prompt if Visual Studio tools are not under the path environment variable.
    Example to build call.exe
    %PATH_TO_SWTOOLKIT%\hammer.bat
    Example to build opt and dbg all programs
    %PATH_TO_SWTOOLKIT%\hammer.bat --jobs=6 --verbose --mode=all all_programs


The built binaries are under talk/build/dbg/staging or talk/build/opt/staging,
depending on the build mode. When the build is complete, you can run the
examples, login or call. For the call sample, you can specify the input and
output RTP dump for voice and video. This package provides two samples of input
RTP dump: voice.rtpdump is a single channel, 16Khz voice encoded with G722, and
video.rtpdump is 320x240 video encoded with H264 AVC at 30 frames per second.
These provided samples will inter-operate with Google Talk Video. If you use
other input RTP dump, you may need to change the codecs in call_main.cc, lines
215 - 222.

Libjingle also builds two server tools, a relay server and a STUN server. The
relay server may be used to relay traffic when a direct peer-to-peer connection
could not be established. The STUN Server implements the STUN protocol for
Simple Traversal of UDP over NAT. See the Libjingle Developer Guide at
http://code.google.com/apis/talk/index.html for information about configuring a
client to use this relay server and this STUN server.

To use LinphoneMediaEngine, you need to perform the following additional steps:
  * Download and install the "MediaStreamer" library on your
    machine.
  * Add the following lines into the libjingle.scons file.
    In the "talk.Library(env, name = "libjingle",..." section, you need to add:
      "HAVE_LINPHONE",
      "HAVE_SPEEX",
      "HAVE_ILBC",
    to the "cppdefines = [".

    In the "talk.App(env, name = "call",..." section, you need to add:
      "mediastreamer",
    to the "libs = [".
  * In the libjingle.scons file, add the following line into the "srcs = [ ..."
    section of the "libjingle" Library.
      "session/phone/linphonemediaengine.cc",
