How to add Zorg to PJSIP

First, you need:
Then:
  1. extract the PJSIP package (e.g. pjproject-1.10.tar.bz2) to the default directory (e.g. pjproject-1.10/)
  2. extract the zorg package (e.g. pjsip-1.10+zorg-1.0.tar.bz2) to the default directory (e.g. pjsip-1.10+zorg-1.0/)
  3. copy the zorg subdirectory of the zorg package (e.g. pjsip-1.10+zorg-1.0/zorg) as third_party/zorg under the PJSIP directory (e.g. pjproject-1.10/third_party/zorg)
  4. apply the zorg.diff patch from the zorg package to the PJSIP directory: just run the patch -p1 --binary < path to zorg.diff command line from the PJSIP directory.
This should be enough! To actually enable ZRTP, remember to add the following line to your pj/config_site.h before building:
#define PJMEDIA_HAS_ZRTP 1

Requirements

Windows build

Visual Studio 2005 or later is required to build PJSIP with Zorg.

Symbian build

The S60 SDK (either 3rd or 5th edition) and the OpenC/C++ plugin are required to build PJSIP with Zorg. OpenC/C++ is only required to build PJSIP with Zorg, Zorg doesn't actually depend on the OpenC/C++ runtime.
The OpenC/C++ SDK plugin has a bug: manually patch the SDK as described in the Open C incorrectly implements offsetof knowledge base article.

Known issues

The patch includes an update to libsrtp; zrtp.org might work with an older version, but it hasn't been tested.
The Windows build environment only supports Visual Studio 2005 and later
The UNIX build environments is currently unsupported.
The Symbian build environment is broken by default, and needs to be patched by hand; see the Symbian build section above for more information.

Description of the changes

Build system

The integration adds the following new build-time configuration macros:

PJMEDIA

The integration adds a new media (RTP) transport to PJMEDIA, which will automatically try to enable ZRTP security on every stream (unless disabled).

PJSUA-LIB

All features of the ZRTP transport are available from PJSUA-LIB, either as extensions to the PJSUA call object or as new global functions.

PJSUA

Command line options

New per-account command line options:
  --zrtp-use=N        Use ZRTP? 0:disabled, 1:optional, 2:mandatory (def:1)
  --zrtp-id=IN        ZRTP ZID (24 hexadecimal characters, or '*' for random)
  --zrtp-flags=FLAGS  ZRTP flags: (def:cSdO)
                      C/c enable/disable allowclear
                      S/s enable/disable autosecure
                      D/d enable/disable disclose_bit
                      O/o enable/disable discovery_optimization
  --zrtp-cachettl=S   Set TTL of cached ZRTP secrets to S seconds (def:30 days)
  --zrtp-masquerade=N Masquerade ZRTP messages as media packets? 0:no, 1:yes, 2:always (def:0)


New global command line options:

  --zrtp-global-id=IN Default ZRTP ZID (24 hexadecimal characters, or '*' for random)
  --zrtp-clientid=ID  ZRTP peer id
  --zrtp-cache=FILE   ZRTP secrets cache file
Here's what they do:

Run-time commands

New commands available while PJSUA is running:
| z  Toggle ZRTP secure/clear mode     ZV Set ZRTP SAS Verified flag         |
| Z  Set ZRTP secure/clear mode        Zv Unset ZRTP SAS Verified flag       |
| mz Make ZRTP call                    ms Make SRTP call                     |
And here's what they do: