Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

Tree [e48502] master /
History



File Date Author Commit
rpm 2010-05-01 Peter Lemenkov Peter Lemenkov [7b4fcd] Removed 'reload' target from the init-sript.
scripts 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
.gitignore 2010-05-01 Peter Lemenkov Peter Lemenkov [bb7a6a] Remove more autogenerated stuff
AUTHORS 2005-03-06 Maxim Sobolev Maxim Sobolev [50f7dd] Regen.
COPYING 2010-05-28 sobomax sobomax [5c847b] Update (c).
ChangeLog 2005-03-06 Maxim Sobolev Maxim Sobolev [50f7dd] Regen.
INSTALL 2005-03-06 Maxim Sobolev Maxim Sobolev [50f7dd] Regen.
Makefile.am 2010-12-29 sobomax sobomax [1cf972] Split command processing into its own separate ...
Makefile.in 2010-12-29 sobomax sobomax [1fe228] Re-gen with automake 1.11.
NEWS 2005-03-06 Maxim Sobolev Maxim Sobolev [50f7dd] Regen.
README 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
README.remote 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
aclocal.m4 2010-12-29 sobomax sobomax [1fe228] Re-gen with automake 1.11.
config.guess 2005-03-06 Maxim Sobolev Maxim Sobolev [50f7dd] Regen.
config.h.in 2008-12-24 Maxim Sobolev Maxim Sobolev [d946b8] Regen.
config.sub 2005-03-06 Maxim Sobolev Maxim Sobolev [50f7dd] Regen.
configure 2011-02-19 sobomax sobomax [f770eb] Regen using Autoconf 2.68.
configure.ac 2011-02-19 sobomax sobomax [19f720] Add AC_PROG_MKDIR_P - MKDIR_P has been moved fr...
depcomp 2004-02-20 Nils Ohlmeier Nils Ohlmeier [0eda4c] initial checkin of the new autoconf support
g711.h 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
install-sh 2004-02-20 Nils Ohlmeier Nils Ohlmeier [0eda4c] initial checkin of the new autoconf support
ltmain.sh 2005-03-06 Maxim Sobolev Maxim Sobolev [50f7dd] Regen.
main.c 2013-08-30 Maksym Sobolyev Maksym Sobolyev [7e19d7] o Improve RTP/RTCP/MOH processing loop to d...
makeann.c 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
manpage.xml 2010-11-01 sobomax sobomax [745ec6] Implement option to send notifications to a rem...
missing 2004-02-20 Nils Ohlmeier Nils Ohlmeier [0eda4c] initial checkin of the new autoconf support
mkinstalldirs 2004-02-20 Nils Ohlmeier Nils Ohlmeier [0eda4c] initial checkin of the new autoconf support
rtp.c 2012-08-05 sobomax sobomax [6fc6fa] Add support for playing G.722 files.
rtp.h 2012-08-05 sobomax sobomax [6fc6fa] Add support for playing G.722 files.
rtp_resizer.c 2011-03-17 sobomax sobomax [6b82ff] Fix resizer broken with some of the recent chan...
rtp_resizer.h 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
rtp_server.c 2012-08-05 sobomax sobomax [6fc6fa] Add support for playing G.722 files.
rtp_server.h 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
rtpp_command.c 2012-11-13 sobomax sobomax [fff62d] Re-do locking around command-line socket so tha...
rtpp_command.h 2012-11-13 sobomax sobomax [fff62d] Re-do locking around command-line socket so tha...
rtpp_command_async.c 2014-01-02 sobomax sobomax [e48502] Make sure we exit process_commands() routine on...
rtpp_command_async.h 2010-12-29 sobomax sobomax [1cf972] Split command processing into its own separate ...
rtpp_defines.h 2013-08-30 Maksym Sobolyev Maksym Sobolyev [c2c15e] Clarify comment.
rtpp_log.c 2010-12-29 sobomax sobomax [1cf972] Split command processing into its own separate ...
rtpp_log.h 2010-12-29 sobomax sobomax [1cf972] Split command processing into its own separate ...
rtpp_network.c 2012-11-13 sobomax sobomax [fff62d] Re-do locking around command-line socket so tha...
rtpp_network.h 2010-12-29 sobomax sobomax [1cf972] Split command processing into its own separate ...
rtpp_notify.c 2011-02-27 sobomax sobomax [4b967a] Move initialization of the notification thread ...
rtpp_notify.h 2011-02-27 sobomax sobomax [4b967a] Move initialization of the notification thread ...
rtpp_record.c 2010-12-29 sobomax sobomax [1cf972] Split command processing into its own separate ...
rtpp_record.h 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
rtpp_session.c 2013-08-30 sobomax sobomax [5d0302] Rename POLL_LIMIT into POLL_RATE, which better ...
rtpp_session.h 2013-08-30 sobomax sobomax [5d0302] Rename POLL_LIMIT into POLL_RATE, which better ...
rtpp_syslog_async.c 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
rtpp_syslog_async.h 2010-05-28 sobomax sobomax [5c0916] Get rid of CVS $Id$ keyword.
rtpp_util.c 2012-11-13 sobomax sobomax [fff62d] Re-do locking around command-line socket so tha...
rtpp_util.h 2013-08-30 sobomax sobomax [75c961] Undef MIN/MAX finctions if they are defined in ...
rtpproxy.8 2009-05-30 Maxim Sobolev Maxim Sobolev [582daf] Re-gen.
stamp-h.in 2005-03-06 Maxim Sobolev Maxim Sobolev [50f7dd] Regen.

Read Me

I. About

The RTPproxy is a high-performance software proxy for RTP streams that can
work together with SER or OpenSER. Originally created for handling NAT
scenarious it can also act as a generic media relay as well as gateway RTP
sessions between IPv4 and IPv6 networks. RTPproxy was developed by Maxim
Sobolev and now is being actively maintained by the Sippy Software, Inc.

The RTPproxy supports some advanced features, such as remote control mode,
allowing building scalable distributed SIP VoIP networks. The nathelper module
included into the SER or OpenSER SIP Proxy software allows using multiple
RTPproxy instances running on remote machines for fault-tolerance and
load-balancing purposes.

The software also supports video relaying and RTP session recording.


II. How it works

This proxy works as follows:

- When SER receives INVITE reqiest, it extracts call-id from it and
  communicates it to the proxy via Unix domain socket. Proxy looks for an
  existing sessions with such id, if the session exists it returns UDP port
  for that session, if not, then it creates a new session, binds to a first
  empty UDP port from the range specified at the compile time and returns
  number of that port to a SER. After receiving reply from the proxy, SER
  replaces media ip:port in the SDP to point to the proxy and forwards
  reqiest as usually;

- when SER receives non-negative SIP reply with SDP it again extracts
  call-id from it and communicates it to the proxy. In this case the proxy
  does not allocate a new session if it doesn't exist, but simply performs a
  lookup among existing sessions and returns either a port number if the
  session is found, or error code indicating that there is no session with
  such id. After receiving positive reply from the proxy, SER replaces media
  ip:port in the SIP reply to point to the proxy and forwards reply as
  usually;

- after the session has been created, the proxy listens on the port it has
  allocated for that session and waits for receiving at least one UDP
  packet from each of two parties participating in the call. Once such
  packet is received, the proxy fills one of two ip:port structures
  associated with each call with source ip:port of that packet. When both
  structures are filled in, the proxy starts relaying UDP packets between
  parties;

- the proxy tracks idle time for each of existing sessions (i.e. the time
  within which there were no packets relayed), and automatically cleans
  up a sessions whose idle times exceed the value specified at compile
  time (60 seconds by default).


III. Limitations

Currently, rtpproxy does not support command-line definition of RTP port
range. By default rtpproxy uses UDP ports 35000-65000 and these should be
opened any firewalls in front of rtpproxy. The ports used can be modified in
rtpp_defines.h file (PORT_MIN and PORT_MAX) and then recompile/reinstall.


IV. TODO (in no particular order)

- Port to another OSes;

- make more parameters (e.g. ports range, max idle time etc.) to be
  adjustible via command line.


V. Support

Community-based support could be obtained via SER mailing lists
<serusers@iptel.org>.

Commercial support is available from the Sippy Software, Inc. - visit
http://www.sippysoft.com for details.