summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorJulien Cristau <jcristau@debian.org>2015-08-16 16:38:39 +0100
committerJulien Cristau <jcristau@debian.org>2015-08-16 16:38:39 +0100
commit4dca2e22af5520daee3610c8b88489910d34d2ec (patch)
tree5770c4b3e0f7d77e0079cddec0ba69094f357821 /doc
libccrtp (2.0.9-2.1) unstable; urgency=medium
* Non-maintainer upload. * Rename library packages for g++5 ABI transition (closes: 791101). # imported from the archive
Diffstat (limited to 'doc')
-rw-r--r--doc/Doxyfile479
-rw-r--r--doc/Doxymini479
-rw-r--r--doc/Makefile.am27
-rw-r--r--doc/Makefile.in793
-rw-r--r--doc/ccrtp.info2334
-rw-r--r--doc/ccrtp.texi1507
-rw-r--r--doc/fdl.texi452
-rw-r--r--doc/fdlnotice.texi6
-rw-r--r--doc/gpl.texi392
-rw-r--r--doc/srcmodel.diabin0 -> 1512 bytes
-rw-r--r--doc/srcmodel.txt11
11 files changed, 6480 insertions, 0 deletions
diff --git a/doc/Doxyfile b/doc/Doxyfile
new file mode 100644
index 0000000..9c93ea8
--- /dev/null
+++ b/doc/Doxyfile
@@ -0,0 +1,479 @@
+# Doxyfile 0.0.1
+# Generate doxy documentation in html and latex format.
+
+# This file describes the settings to be used by doxygen for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of word surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME =ccRTP
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =.
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Dutch, French, Italian, Czech, Swedish, German and Japanese
+
+OUTPUT_LANGUAGE = English
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# If the EXTRACT_ALL tag is set to YES all classes and functions will be
+# included in the documentation, even if no documentation was available.
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members inside documented classes or files.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all
+# undocumented classes.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILS_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path.
+
+STRIP_FROM_PATH =
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a class diagram (in Html and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off.
+
+CLASS_DIAGRAMS = YES
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen
+# will only generate file names in lower case letters. If set to
+# YES upper case letters are also allowed. This is useful if you have
+# classes or files whose names only differ in case and if your file system
+# supports case sensitive file names.
+
+CASE_SENSE_NAMES = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the Javadoc-style will
+# behave just like the Qt-style comments.
+
+JAVADOC_AUTOBRIEF = YES
+
+# if the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = NO
+
+# if the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# the TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = NO
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory
+# hierarchy in the documentation.
+
+SHOW_DIRECTORIES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ../w32/include/cc++ ../src ../src/ccrtp
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+FILE_PATTERNS = *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS = config.h macros.h namespace.h
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = ../demo
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT =
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = YES
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT =
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = YES
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT =
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed.
+
+MACRO_EXPANSION = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH = .
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED =
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED tag.
+
+EXPAND_ONLY_PREDEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
+# The CGI_NAME tag should be the name of the CGI script that
+# starts the search engine (doxysearch) with the correct parameters.
+# A script with this name will be generated by doxygen.
+
+CGI_NAME = search.cgi
+
+# The CGI_URL tag should be the absolute URL to the directory where the
+# cgi binaries are located. See the documentation of your http daemon for
+# details.
+
+CGI_URL =
+
+# The DOC_URL tag should be the absolute URL to the directory where the
+# documentation is located. If left blank the absolute path to the
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL =
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the
+# documentation is located. If left blank the directory on the local machine
+# will be used.
+
+DOC_ABSPATH =
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
+# is installed.
+
+BIN_ABSPATH = /usr/local/bin/
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to
+# documentation generated for other projects. This allows doxysearch to search
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS =
diff --git a/doc/Doxymini b/doc/Doxymini
new file mode 100644
index 0000000..f9337f4
--- /dev/null
+++ b/doc/Doxymini
@@ -0,0 +1,479 @@
+# Doxyfile 0.0.1
+# Generate doxy documentation in html and latex format.
+
+# This file describes the settings to be used by doxygen for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of word surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME =ccRTP
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =.
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Dutch, French, Italian, Czech, Swedish, German and Japanese
+
+OUTPUT_LANGUAGE = English
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# If the EXTRACT_ALL tag is set to YES all classes and functions will be
+# included in the documentation, even if no documentation was available.
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members inside documented classes or files.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all
+# undocumented classes.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILS_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path.
+
+STRIP_FROM_PATH =
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a class diagram (in Html and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off.
+
+CLASS_DIAGRAMS = YES
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen
+# will only generate file names in lower case letters. If set to
+# YES upper case letters are also allowed. This is useful if you have
+# classes or files whose names only differ in case and if your file system
+# supports case sensitive file names.
+
+CASE_SENSE_NAMES = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the Javadoc-style will
+# behave just like the Qt-style comments.
+
+JAVADOC_AUTOBRIEF = YES
+
+# if the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = NO
+
+# if the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# the TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = NO
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory
+# hierarchy in the documentation.
+
+SHOW_DIRECTORIES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ../src ../src/ccrtp
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+FILE_PATTERNS = *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS = config.h macros.h namespace.h
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = ../demo
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT =
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = YES
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT =
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = YES
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT =
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed.
+
+MACRO_EXPANSION = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH = .
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED =
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED tag.
+
+EXPAND_ONLY_PREDEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
+# The CGI_NAME tag should be the name of the CGI script that
+# starts the search engine (doxysearch) with the correct parameters.
+# A script with this name will be generated by doxygen.
+
+CGI_NAME = search.cgi
+
+# The CGI_URL tag should be the absolute URL to the directory where the
+# cgi binaries are located. See the documentation of your http daemon for
+# details.
+
+CGI_URL =
+
+# The DOC_URL tag should be the absolute URL to the directory where the
+# documentation is located. If left blank the absolute path to the
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL =
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the
+# documentation is located. If left blank the directory on the local machine
+# will be used.
+
+DOC_ABSPATH =
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
+# is installed.
+
+BIN_ABSPATH = /usr/local/bin/
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to
+# documentation generated for other projects. This allows doxysearch to search
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS =
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..203afce
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,27 @@
+# Copyright (C) 2000-2002 Open Source Telecom Corporation.
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+AUTOMAKE_OPTIONS = no-dependencies
+EXTRA_DIST = srcmodel.txt srcmodel.dia Doxyfile Doxymini
+AM_MAKEINFOFLAGS = --no-warn
+
+info_TEXINFOS = ccrtp.texi
+ccrtp_TEXINFOS = gpl.texi fdl.texi fdlnotice.texi
+
+if DOXY
+noinst_DATA = doxy
+
+doxy: Doxyfile
+ (cd @srcdir@ ; $(DOXYGEN) Doxymini)
+ touch doxy
+
+endif
+
+
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..9d13f30
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,793 @@
+# Makefile.in generated by automake 1.14 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 2000-2002 Open Source Telecom Corporation.
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(ccrtp_TEXINFOS) $(top_srcdir)/autoconf/texinfo.tex
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libgcrypt_local.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/ost_debug.m4 \
+ $(top_srcdir)/m4/ost_maint.m4 $(top_srcdir)/m4/ost_prog.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/ccrtp-config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
+am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
+am__v_DVIPS_0 = @echo " DVIPS " $@;
+am__v_DVIPS_1 =
+AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
+am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
+am__v_MAKEINFO_0 = @echo " MAKEINFO" $@;
+am__v_MAKEINFO_1 =
+AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
+am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
+am__v_INFOHTML_0 = @echo " INFOHTML" $@;
+am__v_INFOHTML_1 =
+AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
+am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
+am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@;
+am__v_TEXI2DVI_1 =
+AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
+am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
+am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@;
+am__v_TEXI2PDF_1 =
+AM_V_texinfo = $(am__v_texinfo_@AM_V@)
+am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
+am__v_texinfo_0 = -q
+am__v_texinfo_1 =
+AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
+am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
+am__v_texidevnull_0 = > /dev/null
+am__v_texidevnull_1 =
+INFO_DEPS = $(srcdir)/ccrtp.info
+TEXINFO_TEX = $(top_srcdir)/autoconf/texinfo.tex
+am__TEXINFO_TEX_DIR = $(top_srcdir)/autoconf
+DVIS = ccrtp.dvi
+PDFS = ccrtp.pdf
+PSS = ccrtp.ps
+HTMLS = ccrtp.html
+TEXINFOS = ccrtp.texi
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__installdirs = "$(DESTDIR)$(infodir)"
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+DATA = $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMMONCPP_CFLAGS = @COMMONCPP_CFLAGS@
+COMMONCPP_LIBS = @COMMONCPP_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FTPDIR = @FTPDIR@
+GNULIBS = @GNULIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDOC_DIR = @KDOC_DIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_CCXX_VERSION = @LT_CCXX_VERSION@
+LT_MAJOR = @LT_MAJOR@
+LT_MINOR = @LT_MINOR@
+LT_RELEASE = @LT_RELEASE@
+LT_SUBVER = @LT_SUBVER@
+LT_VERSION = @LT_VERSION@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WARN_FLAGS = @WARN_FLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = no-dependencies
+EXTRA_DIST = srcmodel.txt srcmodel.dia Doxyfile Doxymini
+AM_MAKEINFOFLAGS = --no-warn
+info_TEXINFOS = ccrtp.texi
+ccrtp_TEXINFOS = gpl.texi fdl.texi fdlnotice.texi
+@DOXY_TRUE@noinst_DATA = doxy
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .dvi .html .info .pdf .ps .texi
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+.texi.info:
+ $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ am__cwd=`pwd` && $(am__cd) $(srcdir) && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ $<; \
+ then \
+ rc=0; \
+ $(am__cd) $(srcdir); \
+ else \
+ rc=$$?; \
+ $(am__cd) $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+.texi.dvi:
+ $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
+ $<
+
+.texi.pdf:
+ $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
+ $<
+
+.texi.html:
+ $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
+ $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) $<; \
+ then \
+ rm -rf $@ && mv $(@:.html=.htp) $@; \
+ else \
+ rm -rf $(@:.html=.htp); exit 1; \
+ fi
+$(srcdir)/ccrtp.info: ccrtp.texi $(ccrtp_TEXINFOS)
+ccrtp.dvi: ccrtp.texi $(ccrtp_TEXINFOS)
+ccrtp.pdf: ccrtp.texi $(ccrtp_TEXINFOS)
+ccrtp.html: ccrtp.texi $(ccrtp_TEXINFOS)
+.dvi.ps:
+ $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) $(AM_V_texinfo) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f "$(distdir)/$$relfile" || \
+ cp -p $$file "$(distdir)/$$relfile"; \
+ else :; fi; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf ccrtp.t2d ccrtp.t2p
+
+clean-aminfo:
+ -test -z "ccrtp.dvi ccrtp.pdf ccrtp.ps ccrtp.html" \
+ || rm -rf ccrtp.dvi ccrtp.pdf ccrtp.ps ccrtp.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-info
+check-am: all-am
+check: check-am
+all-am: Makefile $(INFO_DEPS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(infodir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am: $(DVIS)
+
+html: html-am
+
+html-am: $(HTMLS)
+
+info: info-am
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-info-am
+
+install-dvi: install-dvi-am
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ done
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ $(am__strip_dir) \
+ d2=$$d$$p; \
+ if test -d "$$d2"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ else \
+ list2="$$list2 $$d2"; \
+ fi; \
+ done; \
+ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done; }
+install-info: install-info-am
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
+ fi; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ echo "$$ifile"; \
+ else : ; fi; \
+ done; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ @$(POST_INSTALL)
+ @if $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+install-ps: install-ps-am
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am: $(PDFS)
+
+ps: ps-am
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-pdf-am uninstall-ps-am
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
+ clean-libtool cscopelist-am ctags-am dist-info distclean \
+ distclean-generic distclean-libtool distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
+ mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool pdf \
+ pdf-am ps ps-am tags-am uninstall uninstall-am \
+ uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-pdf-am uninstall-ps-am
+
+
+@DOXY_TRUE@doxy: Doxyfile
+@DOXY_TRUE@ (cd @srcdir@ ; $(DOXYGEN) Doxymini)
+@DOXY_TRUE@ touch doxy
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/ccrtp.info b/doc/ccrtp.info
new file mode 100644
index 0000000..9b8f597
--- /dev/null
+++ b/doc/ccrtp.info
@@ -0,0 +1,2334 @@
+This is ccrtp.info, produced by makeinfo version 5.2 from ccrtp.texi.
+
+INFO-DIR-SECTION Development
+START-INFO-DIR-ENTRY
+* GNU ccRTP: (ccrtp). GNU ccRTP Real-Time Transport Protocol Framework.
+END-INFO-DIR-ENTRY
+
+GNU ccRTP is a C++ class framework for the development of Real Time
+Transport Protocol (RTP) based applications. It is based on GNU Common
+C++.
+
+ Copyright © 2001, 2002, 2003, 2004, 2005, 2006 Federico Montesino
+Pouzols <fedemp@altern.org>. Permission is granted to copy, distribute
+and/or modify this document under the terms of the GNU Free
+Documentation License, Version 1.2 or any later version published by the
+Free Software Foundation; with no Invariant Sections, no Front-Cover
+Texts, and no Back-Cover Texts. A copy of the license is included in
+the section entitled "GNU Free Documentation License".
+
+
+File: ccrtp.info, Node: Top, Next: Introduction, Up: (dir)
+
+GNU ccRTP Manual
+****************
+
+This manual describes GNU ccRTP, a C++ class framework for the
+development of Real Time Transport Protocol (RTP) based applications.
+
+ This is the edition 1.3 of this manual and documents GNU ccRTP
+version 1.3.
+
+* Menu:
+
+* Introduction:: What RTP and ccRTP are.
+* Distribution:: How to get GNU ccRTP.
+* ccRTP Overview:: The library at a glance.
+* Using ccRTP:: Programming with GNU ccRTP overview.
+* Specialized Payload Formats:: Supported payload specific extensions.
+* Standards Tracking:: IETF Standards conformance.
+* Upgrading:: Upgrading applications based on old releases.
+* ccRTP Internals:: How GNU ccRTP is done.
+* Related Work:: Other RTP related libraries and tools.
+* Future Work:: Future of RTP and ccRTP.
+* Licenses:: Library and documentation licenses.
+* Class and Data Type Index:: Index of classes and data types in ccRTP.
+* Method and Function Index:: Index of methods and functions in ccRTP.
+* Concept Index:: Index of concepts.
+
+
+File: ccrtp.info, Node: Introduction, Next: Distribution, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+ccRTP is a C++ framework for developing applications based on the Real
+Time Transport Protocol (RTP henceforth). RTP provides end-to-end
+delivery services for data with real-time characteristics and is being
+developed by the Audio/Video Working Group of the Internet Engineering
+Task Force (IETF).
+
+ ccRTP aims to be an efficient and flexible framework valid for almost
+any kind of application that uses RTP, ranging from high loaded servers
+and gateways to personal phone applications. Default constructs and
+values are provided however for the most common choices in the use of
+RTP. ccRTP conforms to the latest RTP specifications (*note Standards
+Tracking::).
+
+ ccRTP is based on the GNU Common C++ framework, though most of the
+library does not require it. Common C++ provides basic system services
+such as threading, synchronization and sockets(1), which makes it
+possible to provide a complete solution for the use of RTP. However,
+although ccRTP provides facilities and abstractions useful for the RTP
+specific components of applications that use RTP, such applications
+generally require similar system services for other tasks. Besides
+supporting ccRTP, Common C++ provides a portable and efficient framework
+for these kind of services.
+
+ RTP has been defined as an application level protocol framework
+rather than a typical Internet transport protocol such as TCP and UDP.
+Thus, RTP is hardly ever implemented as a layer separated from the
+application. Consequently, RTP applications often must customize the
+adaptable RTP packet layout and processing rules, timing constraints,
+session membership rules as well as other RTP and RTCP mechanisms.
+ccRTP aims to provide a framework for the RTP framework, rather than
+being just an RTP packet manipulation library.
+
+ As a clarification of the scope of the ccRTP library and the RTP
+protocol, we note that ccRTP exclusively deals with the transport of
+data over the RTP protocol. Once parameters such as destination IP
+address and transport port, payload type identifier and timestamp
+frequency are known, ccRTP can be used to open an RTP session and send
+and receive RTP and RTCP packets. A multimedia application will have
+those parameters previously set or, more usually, they can be fetched
+for example from SDP multimedia session descriptions, which can be
+interchanged (and negotiated) between servers and clients by means of
+some signaling protocol: SIP, RTSP, or even H.323. Signaling functions
+are not handled by ccRTP.
+
+ This document is an introductory programmer's manual, for a more
+exhaustive reference see the reference manual distributed with GNU
+ccRTP. In *note ccRTP Overview::, the most important concepts and some
+basic examples are introduced. A deeper and step by step description as
+well as short examples are provided in *note Using ccRTP::.
+
+ Finally, if after reading this document and/or using ccRTP you think
+it fails to provide some functionality that seems to be needed for some
+application, we encourage you to contact the developers of ccRTP and ask
+or propose them improvements and/or additions. You are also encouraged
+to provide these improvements and to join the development team. Bug
+reports, suggestions and criticisms are gladly accepted.
+
+ ---------- Footnotes ----------
+
+ (1) As well as other more specialized services, such as MD5
+computation.
+
+
+File: ccrtp.info, Node: Distribution, Next: ccRTP Overview, Prev: Introduction, Up: Top
+
+2 Distribution
+**************
+
+GNU ccRTP is free software (see
+<http://www.gnu.org/philosophy/philosophy.html>. It is licensed under
+the terms of the GNU General Public License, *Note GNU General Public
+License::, plus a linking exception, *Note GNU ccRTP Linking
+Exception::.
+
+ The linking exception is the same that is used for gcc libstdc++.
+This was done in the case of libstdc++ because the language of the LGPL
+is neither clear nor correct if one uses C++ features such as templates
+and method implimentation directly in headers, as the division between
+the C++ library and another's application is no longer purely a linking
+one. From the practical standpoint, the exact effect is the same as the
+LGPL, but with language that matches these C++ features. This is all
+explained at
+<http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/license.html>.
+
+ This manual is licensed under the terms of the GNU Free Documentation
+License, *Note GNU Free Documentation License::.
+
+ There are several ways to get GNU ccRTP, refer to
+<http://www.gnu.org> and <http://www.gnu.org/software/ccrtp/>. The
+development of ccRTP is hosted at Savannah
+<http://sv.gnu.org/projects/ccrtp/>.
+
+
+File: ccrtp.info, Node: ccRTP Overview, Next: Using ccRTP, Prev: Distribution, Up: Top
+
+3 ccRTP Overview
+****************
+
+At its highest level, ccRTP provides classes for the real-time transport
+of data through RTP sessions, as well as the control functions of RTCP.
+
+ The main concept in the ccRTP implementation of RTP sessions is the
+use of packet queues to handle transmission and reception of RTP data
+packets/application data units. In ccRTP, a data block is transmitted
+by putting it into the transmission (outgoing packets) queue, and
+received by getting it from the reception (incoming packets) queue.
+
+ Starting with 1.0 releases, ccRTP fully supports RTP and RTCP. Here
+is a brief list of some features of ccRTP:
+
+ * Highly extensible to specialized stacks.
+
+ * Supports unicast, multi-unicast and multicast. Handles multiple
+ sources (including synchronization sources and contributing
+ sources) and destinations. Also supports symmetric RTP.
+
+ * Automatic RTCP functions handling, such as association of
+ synchronization sources from the same participant or NTP-RTP
+ timestamp mapping.
+
+ * Genericity as for underlying network and transport protocols
+ through templates.
+
+ * It is threadsafe and supports almost any threading model.
+
+ * Generic and extensible RTP and RTCP header validity checks.
+
+ * Handles source states and information as well as statistics
+ recording.
+
+ * Automatically handles SSRC collisions and performs loop detection.
+
+ * Implements timer reconsideration and reverse reconsideration.
+
+ * Provides good random numbers, based on '/dev/urandom' or,
+ alternatively, on MD5.
+
+ There are several levels of interface (public interface, public or
+protected inheritance, etc) in ccRTP. For instance, the 'rtphello' demo
+program distributed with ccRTP just uses the public interface of the
+'RTPSession' class and does not redefine the virtual method 'onGotSR',
+thus what this program knows about SR reports is the information
+conveyed in the last sender report from any source, which can be
+retrieved via the 'getMRSenderInfo' method of the 'SyncSource' class.
+On the contrary, the 'rtplisten' demo program redefines 'onGotSR' by
+means of inheritance and could do specialized processing of these RTCP
+packets. Generally, both data and control packets are not directly
+accessible through the most external interface.
+
+ All these functions are performed through a few essential classes and
+types. The most basic ones are the enumerated type 'StaticPayloadType',
+and the classes 'StaticPayloadFormat' and 'DynamicPayloadFormat'. The
+most important ones are the classes 'RTPSession', 'SyncSource',
+'Participant' and 'AppDataUnit', that represent RTP sessions,
+synchronization sources, participants in an RTP application, and
+application data units conveyed in RTP data packets, respectively.
+
+ In the next sections, two basic examples are presented. These
+examples are intended to provide a concrete idea of what the code of a
+ccRTP based application looks like, they are not complete or compilable
+programs. You can find some real examples under the demo directory in
+the source distribution of ccRTP.
+
+* Menu:
+
+* Simple Transmitter:: Skeleton of a simple transmitter.
+* Simple Receiver:: Skeleton of a simple receiver.
+
+
+File: ccrtp.info, Node: Simple Transmitter, Next: Simple Receiver, Up: ccRTP Overview
+
+3.1 Simple Transmitter
+======================
+
+The following snippet illustrates the required steps to send an
+application data unit over RTP.
+
+ RTPSession s(InetHostAddress("127.0.0.1"),8000); // bind reception socket
+
+ // Initialization
+ cout << "Local SSRC identifier: " << s.getLocalSSRC() << endl;
+ s.addDestination("www.example.com",9000); // set one destination for packets
+ s.setPayloadFormat(staticPayloadFormat(sptPCMU));
+ s.startRunning(); // start running the packet queue scheduler
+
+ // Send data
+ s.putData(0,buffer,bufferLen); // buffer holds bufferLen payload octets
+
+
+File: ccrtp.info, Node: Simple Receiver, Prev: Simple Transmitter, Up: ccRTP Overview
+
+3.2 Simple Receiver
+===================
+
+The required actions to receive an application data unit over RTP are
+listed in the following code snippet.
+
+ RTPSession s(InetHostAddress("127.0.0.1"),9000); // bind reception socket.
+
+ // Initialization.
+ cout << "Local SSRC identifier: " << s.getLocalSSRC() << endl;
+ s.setPayloadFormat(staticPayloadFormat(sptPCMU));
+ s.startRunning(); // start running the packet queue scheduler.
+
+ // Receive data.
+ const AppDataUnit* adu;
+ adu = s.getData(0); // get data with initial -0- timestamp.
+ if ( adu != NULL )
+ // do something with adu.
+ // adu->getType() provides the payload type.
+ // adu->getData() provides a const uint8 pointer to a data buffer.
+ // adu->getSize() provides the number of octets in the buffer.
+ // see other methods in the class AppDataUnit, such as getSource().
+
+
+File: ccrtp.info, Node: Using ccRTP, Next: Specialized Payload Formats, Prev: ccRTP Overview, Up: Top
+
+4 Using ccRTP
+*************
+
+When using ccRTP, both sending and receiving of data transported over
+RTP sessions is done through reception and transmission queues handled
+by the RTP stack. In the most common case, a separate execution thread
+for each RTP session handles the queues. This case is the threading
+model that we will generally assume throughout this document. Note
+however that ccRTP supports other threading models, particularly ccRTP
+supports the use of a single execution thread to serve a set of RTP
+sessions. It is also possible to not associate any separate thread with
+any RTP session, manually calling the main data and control service
+methods from whatever other thread.
+
+ The basic idea for packet reception with ccRTP is that the
+application does not directly read packets from sockets but gets them
+from a reception queue. The stack is responsible for inserting received
+packets in the reception queue and handling this queue. In general, a
+packet reception and insertion in the reception queue does not occur at
+the same time the application gets it from the queue.
+
+ Conversely, the basic idea for packet transmission with ccRTP is that
+packets are not directly written to sockets but inserted in a
+transmission queue handled by the stack. In general, packet insertion
+and transmission occur at different times, though it is not necessary.
+
+ In order to use ccRTP, you must include the main header ('#include
+<ccrtp/rtp.h>'. Two additional headers are provided by ccRTP:
+
+'#include <ccrtp/rtppool.h'
+ Classes for pools of RTP service threads.
+
+'#include <ccrtp/rtpext.h>'
+ Classes for RTP extensions which are not mature yet.
+
+ You must also link in the library, currently 'ccrtp1'.
+
+ As presented in the last examples, before starting to send or receive
+data, RTP sessions must be created, the payload format to use must be
+set and the stack must be signaled to start running. The following
+sections describe the use of ccRTP during the different phases of RTP
+sessions and RTP applications in general.
+
+* Menu:
+
+* RTP Sessions:: Using ccRTP to establish RTP sessions.
+* Payload Types and Formats:: Payload types and formats.
+* Participants:: Participants and sources of synchronization.
+* RTP Packets Extensions:: Extensions to RTP data packets handling.
+* RTCP Packets Extensions:: Extensions to RTCP packets handling.
+* Handling Events:: Table of ccRTP plug-ins to react to events.
+
+
+File: ccrtp.info, Node: RTP Sessions, Next: Payload Types and Formats, Up: Using ccRTP
+
+4.1 RTP Sessions
+================
+
+This section discusses the use of 'RTPSession' objects. Some other
+classes and concepts are also used, these are just briefly presented
+here; deeper explanations are provided in next sections.
+
+* Menu:
+
+* Initiating Sessions:: RTP sessions initialization with ccRTP.
+* Sending Data:: Sending RTP data packets.
+* Receiving Data:: Receiving RTP data packets.
+* Closing Sessions:: Extensions to RTP data packets handling.
+* Types of Sessions:: Choosing a threading and socket model.
+
+
+File: ccrtp.info, Node: Initiating Sessions, Next: Sending Data, Up: RTP Sessions
+
+4.1.1 Initiating Sessions
+-------------------------
+
+Initiating RTP sessions with ccRTP involves the construction of an
+object of the class 'RTPSession' and calling some optional
+initialization methods. 'RTPSession' constructors take two mandatory
+arguments: local network address and local transport port (where
+incoming packets are expected). There are two constructors, one of them
+takes a host address as first parameter, while the other takes a
+multicast address. In the latter case, the application will join to a
+multicast group.
+
+ General purpose RTP stacks of ccRTP, such as 'RTPSession' objects,
+must be signaled to start execution. This is done calling the
+'startRunning()' method. Note there is also a 'enableStack()' method,
+this only activates the stack but does not start the execution of the
+stack thread.
+
+ After the steps above, the application can receive data, but will not
+transmit to any destination. This and other session parameters can be
+set as follows:
+
+ * Add destinations: calling the method 'addDestination'.
+
+ * Set payload format. Method 'setPayloadFormat'. By default, the
+ static payload type 0 is assumed (PCMU format at 8Khz).
+
+ * Set local SDES Items. For common applications, the CNAME item
+ value is automatically guessed as user@host. Other items have no
+ default value and are not sent in RTCP packets unless a value is
+ specified by the application. For those items that should be sent
+ in RTCP packets along with the mandatory CNAME, its values can be
+ set calling the 'setSDESItem' and 'setPRIVPrefix' methods over the
+ object returned by the 'defaultApplication' global function.
+
+ * Enable padding of data packets. Calling setPadding(uint8) on
+ outgoing data queues enables transparent padding of data packets to
+ a multiple of the padding maximum length specified. By default,
+ padding is off (maximum length of padding is 0).
+
+ * setting addresses:
+
+ * Set session bandwidth calling the 'setSessionBandwidth' method of
+ the session object. If not called, a default bandwidth of 64Kbps
+ is assumed, and 5% of this bandwidth is used for RTCP. This
+ percentage can be changed through the setControlBandwidth method.
+
+
+File: ccrtp.info, Node: Sending Data, Next: Receiving Data, Prev: Initiating Sessions, Up: RTP Sessions
+
+4.1.2 Sending Data
+------------------
+
+Data packets are sent through the method 'putData', that takes as first
+parameter the RTP timestamp for the data specified as second parameter.
+ccRTP handles the random offset for the RTP timestamp internally, so the
+timestamp value that corresponds to the session creation time is 0.
+
+ By default, the marker bit of the sent packets is not set. Its value
+for the next packet (the one that will convey the data provided in the
+next call to 'putData') can be set through the 'setMark' method, which
+takes a boolean as argument.
+
+ ccRTP also supports fragmenting data blocks into several RTP packets.
+The 'setMaxSendSegmentSize' method can be used to request that no RTP
+packet be transmitted with a payload length greater than the value
+specified through 'setMaxSendSegmentSize'. The default value of this
+parameter can be retrieved via 'getDefaultMaxSendSegmentSize', which
+currently should return 65536. When data blocks greater than the
+maximum segment size are provided through 'putData', two or more packet
+will be inserted in the outgoing packet queue. All these packets but
+the last one will have length equal to the maximum segment size, whereas
+the last one's size will be lower or equal to the maximum segment size.
+
+
+File: ccrtp.info, Node: Receiving Data, Next: Closing Sessions, Prev: Sending Data, Up: RTP Sessions
+
+4.1.3 Receiving Data
+--------------------
+
+Received data is retrieved from the incoming packet queue through the
+'getData' method, which, given a timestamp and an optional source of
+synchronization. This method returns a pointer to an 'AppDataUnit'
+object as opposed to a pointer to a memory block. In ccRTP application
+data units are represented through objects of the 'AppDataUnit' class,
+that provides access to the synchronization source of the data and other
+related properties.
+
+ The incoming packet queue takes care of functions such as packet
+reordering or filtering out duplicate packets.
+
+ You can guess if there are packets in the reception queue calling
+'isWaiting'. Both 'getData' and 'isWaiting' take an optional parameter
+which selects a particular synchronization source of data units. If not
+specified, data units are returned regardless of its source.
+
+
+File: ccrtp.info, Node: Closing Sessions, Next: Types of Sessions, Prev: Receiving Data, Up: RTP Sessions
+
+4.1.4 Closing Sessions
+----------------------
+
+RTP sessions can be closed deleting or destroying 'RTPSession' objects.
+The stack sends a BYE packet to every destination when the destructor of
+sessions is called. It is also possible to explicitly send a BYE packet
+through the dispatchBYE method, which takes the leaving reason string as
+argument. Note that dispatchBYE will honor a number of rules for
+sending BYE packets specified in the RTP standard: a BYE packet is not
+sent if no RTP/RTCP packet was sent, and BYE floods avoiding mechanisms
+are employed.
+
+ Note that when a BYE RTCP packet is received from a remote
+participant, the virtual 'onGotGoodbye' will be called.
+
+
+File: ccrtp.info, Node: Types of Sessions, Prev: Closing Sessions, Up: RTP Sessions
+
+4.1.5 Types of Sessions
+-----------------------
+
+_TODO:_ explain how to instantiate templates depending on the threading
+model and the number of sockets to use. Also symmetric
+channels/sessions. Describe what's a channel and a session.
+
+
+File: ccrtp.info, Node: Payload Types and Formats, Next: Participants, Prev: RTP Sessions, Up: Using ccRTP
+
+4.2 Payload Types and Formats
+=============================
+
+In the context of RTP, an RTP payload type is a 7-bit numeric identifier
+that identifies a payload format. For payload types, GNU ccRTP defines
+the integer type 'PayloadType'. ccRTP also defines The enumerated type
+'StaticPayloadType', as the enumeration of the RTP Payload Types
+statically assigned for standard audio and video formats.
+
+ These codes were initially specified in 'RFC 1890, "RTP Profile for
+Audio and Video Conferences with Minimal Control" (AVP profile)',
+superseded by 'RFC 3550', and are registered as MIME types in 'RFC
+3555'. Codes below 96 may be assigned statically, although the default
+bindings for many of them are already reserverd. Codes in the range
+96-127 are assigned dinamically by means outside of the RTP profile or
+protocol specification.
+
+ See the "RTP Parameters" list at IANA
+<http://www.iana.org/assignments/rtp-parameters>. Note however that
+registering static payload types is now considered a deprecated practice
+in favor of dynamic payload type negotiation.
+
+ The properties of a payload format that, as an RTP stack, ccRTP takes
+into account are the payload type (numeric identifier) and the RTP clock
+rate. Other properties, such as MIME type, number of audio channels,
+"ptime" and "maxptime" are not considered. These are only of interest
+for higher level protocols, such as SDP and H.245.
+
+ GNU ccRTP defines a hierarchy of payload format classes. Its root is
+'PayloadFormat', which is a base class for 'StaticPayloadFormat' and
+'DynamicPayloadFormat'.
+
+ Static payload format objects are built from a static payload code.
+These are defined in the enumerated type 'StaticPayloadType'. The
+following example constructs a 'StaticPayloadFormat' object
+corresponding to the payload type 0 (statically bounded to PCMA in 'RFC
+3551'):
+
+ StaticPayloadType pt = sptPCMU;
+ StaticPayloadFormat* spf = new StaticPayloadFormat(pt);
+
+ Of course, we could have said:
+
+ StaticPayloadFormat* spf = new StaticPayloadFormat(sptPCMA);
+
+ StaticPayloadFormat objects build like the ones above hold the
+necessary parameters so that the RTP stack can handle incoming and
+outgoing packets.
+
+ Regarding dynamic payload formats, a call to
+'DynamicPayloadFormat::DynamicPayloadFormat(100,90000)' like the
+following:
+
+ DynamicPayloadFormat* dpf = new DynamicPayloadFormat(100,90000);
+
+ Will construct a dynamic payload format object that ties together the
+'100' payload type numeric identifier and an RTP clock rate of 90 Khz.
+Note that the numeric identifier does not have to be in the dynamic
+range. The static payload types are default bindings and MAY be
+overriden, thus, DynamicPayloadFormat(0,90000) is a valid construct
+provided 0 has been established as the payload type through a previous
+negotiation process(1).
+
+ Whether and how the payload has been negotiated is outside of the
+scope of RTP and ccRTP, so applications must choose between
+'StaticPayloadFormat' and 'DynamicPayloadFormat' accordingly to their
+multimedia session control mechanisms.
+
+ ---------- Footnotes ----------
+
+ (1) Despite the fact that RFC 3551 defines a static binding of the 0
+code to mu-law PCM at 8Khz.
+
+
+File: ccrtp.info, Node: Participants, Next: RTP Packets Extensions, Prev: Payload Types and Formats, Up: Using ccRTP
+
+4.3 Participants And Sources of Synchronization
+===============================================
+
+In GNU ccRTP, there are classes that represent RTP applications
+('RTPApplication'), participants ('Participant'), synchronizacion
+sources ('SyncSource') and RTP sessions ('RTPSession'). The relations
+among these entities are shown in the following diagram:
+
+
+ --------------------| Participant |--------------------
+ | 0:n --------------- 0:1 |
+ | 1 1:n |
+ ------------------ ----------------
+ | RTPApplication | | SyncSource |
+ ------------------ ----------------
+ | 1 0:n |
+ | --------------- |
+ --------------------| RTPSession |--------------------
+ 0:n --------------- 1"
+
+ An RTP application establishes a space of CNAME identifiers, whereas
+an RTP session establishes a space of SSRC identifiers.
+
+ For each source of synchronization seen in an RTP session, a
+'SyncSource' object identified by a SSRC numeric identifier is created.
+Thus, at the beginning of an RTP session there are no 'SyncSource'
+objects related. Note that, if the local source sends packets to itself
+during an RTP session, a 'SyncSource' object will be created for it.
+
+ The list of sources of synchronization identified in an RTP session
+can be retrived through STL-like iterators of type
+'RTPSession::SyncSourcesIterator', as shown in the following example.
+
+ // rx is an RTPSession object
+ RTPSession::SyncSourcesIterator it;
+ for (it = rx.begin() ; it != rx.end(); it++) {
+ const SyncSource &s = *it;
+ cout << s.getID();
+ if ( s.isSender() )
+ cout << "is an active sender";
+ cout << endl;
+ }
+
+ Note 'RTPSession::SyncSourcesIterator' is a const iterator.
+
+ When using RTCP, it is possible to associate several synchronization
+source objects to a participant in the multimedia session, which is
+represented through the association between 'Participant' and
+'SyncSource' objects. The participant object linked to a source of
+synchronization can be retrieved through the
+'SyncSource::getParticipant()' method, as the following examples shows:
+
+ // s is a source of synchronization object (SyncSource)
+ Participant *p = s.getParticipant();
+ cerr << p->getSDESItem(SDESItemTypeCNAME) << endl;
+
+ When RTCP is not being used or the CNAME identifier corresponding to
+a synchronization source has not been received yet, the participant
+associated with a synchronization source is not known. In these cases,
+the method 'SyncSource::getParticipant()' will return a NULL pointer.
+On the contrary, a participant is always related to a synchronization
+source at least. It can also be related to more than one
+synchronization source (for instance, when a participant in a
+videoconference sends two video streams from two different chameras).
+Note that, if the local source sends data and control packets to itself,
+a 'Participant' object will be created for it.
+
+ Thus, the 'SyncSource::getParticipant' provides a facility for
+inter-media synchronization.
+
+ The association of RTP sessions and participants with
+'RTPApplication' objects makes it possible to implement several "RTP
+applications" in the same application or process, each one having a
+separate CNAME space. By default, all RTP sessions are associated to an
+RTP application provided by the global method 'defaultApplication()'.
+The local CNAME for the default application is guessed from the user and
+machine name, as specified in 'RFC 3550'.
+
+ However, other applications may be created through the constructor
+'RTPApplication::RTPApplication(const std::string& cname)'. RTP
+sessions are associated with applications other than the default via an
+optional constructor parameter.
+
+ Similarly to the list of synchronization sources, the list of
+participants in a session can be retrieved using iterators of type
+'RTPApplication::ParticipantsIterator', see the following example, which
+shows the list of CNAMEs of the participants in the default application:
+
+ RTPApplication &app = defaultApplication();
+ RTPApplication::ParticipantsIterator ai;
+ for ( ai = app.begin(); ai != app.end(); ai++ ) {
+ const Participant &p = *ai;
+ cerr << p.getSDESItem(SDESItemTypeCNAME) << endl;
+ }
+
+ Note 'RTPApplication::ParticipantsIterator' is a const iterator.
+
+ _TODO: SyncSource states_.
+
+
+File: ccrtp.info, Node: RTP Packets Extensions, Next: RTCP Packets Extensions, Prev: Participants, Up: Using ccRTP
+
+4.4 RTP Packets Extensions
+==========================
+
+_TODO._ Describe 'RTPPacket', 'IncomingRTPPkt' and 'OutgoingRTPPkt'
+classes. *Note RTP Packets Arrival::, for a discussion of event
+handling virtuals that allow for specialized processing of data packets.
+
+
+File: ccrtp.info, Node: RTCP Packets Extensions, Next: Handling Events, Prev: RTP Packets Extensions, Up: Using ccRTP
+
+4.5 RTCP Packets Extensions
+===========================
+
+*Note RTCP Packets Arrival::, for a discussion of event handling
+virtuals that allow for specialized processing of control packets.
+
+
+File: ccrtp.info, Node: Handling Events, Prev: RTCP Packets Extensions, Up: Using ccRTP
+
+4.6 Handling Events
+===================
+
+There are a number of events that may require special response from the
+application. ccRTP defines plug-ins to handle these events.
+
+* Menu:
+
+* RTP Packets Arrival:: Filtering and extending RTP packets parsing.
+* RTCP Packets Arrival:: Filtering and extending RTCP packets parsing.
+* Synchronization Source States:: Handling state transitions.
+* SSRC Collisions:: Handling SSRC identifier collisions.
+* RTP Packets Expiration:: Outgoing and incoming RTP packets expiration.
+
+
+File: ccrtp.info, Node: RTP Packets Arrival, Next: RTP Packets Expiration, Up: Handling Events
+
+4.6.1 RTP Packets Arrival
+-------------------------
+
+'onRTPPacketRecv' is the virtual method that may be redefined in any
+subclass of 'IncomingDataQueue', particularly in subclasses of
+'RTPSession'. It takes an 'IncomingRTPPkt' object as argument and
+returns a boolean indicating whether the packet should be inserted in
+the reception queue.
+
+
+File: ccrtp.info, Node: RTP Packets Expiration, Next: RTCP Packets Arrival, Prev: RTP Packets Arrival, Up: Handling Events
+
+4.6.2 RTP Packets Expiration
+----------------------------
+
+'onExpireSend' and 'onExpireRecv'
+
+ 'end2EndDelayed'
+
+
+File: ccrtp.info, Node: RTCP Packets Arrival, Next: Synchronization Source States, Prev: RTP Packets Expiration, Up: Handling Events
+
+4.6.3 RTCP Packets Arrival
+--------------------------
+
+Incoming RTCP packets are automatically handled by ccRTP. However, this
+does not mean you can't track the reception of RTCP packets.
+
+ * 'onGotSR'
+
+ * 'onGotRR'
+
+ * 'onGotSDESChunk'
+
+ * 'onGotAPP'
+
+ * 'onGotRRSRExtension'
+
+ Note that this events correspond to RTCP packets, not RTCP compound
+packets, and probably the reception of a compound packet will trigger
+more than one of these events.
+
+
+File: ccrtp.info, Node: Synchronization Source States, Next: SSRC Collisions, Prev: RTCP Packets Arrival, Up: Handling Events
+
+4.6.4 Synchronization Source States
+-----------------------------------
+
+'onNewSyncSource'.
+
+
+File: ccrtp.info, Node: SSRC Collisions, Next: RTP Packets Expiration, Prev: Synchronization Source States, Up: Handling Events
+
+4.6.5 SSRC Collisions
+---------------------
+
+'onSSRCCollision'.
+
+
+File: ccrtp.info, Node: Specialized Payload Formats, Next: Standards Tracking, Prev: Using ccRTP, Up: Top
+
+5 Specialized Payload Formats
+*****************************
+
+_TODO:_ finish 2833bis and CN.
+
+ _TODO:_ comment H.261 specific RTCP packets: FIR and NACK.
+
+
+File: ccrtp.info, Node: Standards Tracking, Next: Upgrading, Prev: Specialized Payload Formats, Up: Top
+
+6 Standards Tracking
+********************
+
+_TODO: explain what is done/being done/planned_.
+
+ * 'RTP: A Transport Protocol for Real-Time Applications (RFC 3550,
+ which supersedes RFC 1889)'.
+
+ * 'RTP Profile for Audio and Video Conferences with Minimal Control
+ (RFC 3551, which supersedes RFC 1890)'.
+
+ * 'MIME Type Registration of RTP Payload Formats (RFC 3555)'.
+
+ * 'IANA RTP Parameters'.
+
+ * 'RTP Payload Format for H.261 Video Streams (RFC 2032)'. Defines
+ H.261 specific FIR and NACK RTCP packets.
+
+ Not yet implemented:
+
+ * 'The Secure Real-time Transport Protocol'. SRTP provile.
+
+ * 'Extended RTP Profile for RTCP-based Feedback (RTP/AVPF)'.
+
+ * 'Extended RTP Profile for RTCP-based Feedback (RTP/AVPF)'.
+
+ * 'Extended Secure RTP Profile for RTCP-based Feedback (RTP/SAVPF)'.
+
+
+File: ccrtp.info, Node: Upgrading, Next: ccRTP Internals, Prev: Standards Tracking, Up: Top
+
+7 Upgrading
+***********
+
+This chapter outlines the main steps required to upgrade applications
+written for old releases of ccRTP (0.6.x, 0.7.x and 0.9.x series) to the
+1.0 series. It is written mostly as a recipe of replacements for old
+constructs.
+
+ Replace '#include <cc++/rtp.h>' with '#include <ccrtp/rtp.h>'(1).
+
+ Changes that have to do more with Common C++ 2 than with ccRTP:
+
+'exit(int)'
+ Replace with exit()
+
+'Thread::Terminate()'
+ Replace with Thread::terminate()
+
+'ccxx_sleep(timeout_t)'
+ Replace with sleep(timeout_t).
+
+'Thread::Run()'
+ Replace with Thread::run()
+
+ Changes required by ccRTP itself:
+
+'RTPSource'
+ Now 'SyncSource', and is a somewhat different concept. For
+ instance, calls to RTPSource::getID() must be replaced with calls
+ to SyncSource::getID(), which in most cases will not imply any
+ change to this part of the code.
+
+'RTPQueue::getLocalInfo()->getID()'
+ Replace with 'RTPQueueBase::getLocalSSRC()'
+
+'RTPQueue::getCNAME()'
+ Replace with 'defaultApplication().getSDESItem(SDESItemTypeSDES)'.
+
+'RTPQueue::getPacket()'
+ 'getPacket()' has been removed and now there is only a 'getData()'
+ method in the RTP queues.
+
+'RTPQueue::setTimeout()'
+ Replace calls to RTPQueue::setTimeout(microtimeout_t) with calls to
+ OutgoingDataQueue(microtimeout_t), whose purpose and working is
+ exactly the same.
+
+'RTPQueue::putPacket()'
+ 'putPacket()' has been removed and now there is only a 'putData()'
+ method in the RTP queues. Note also that now the payload type is
+ not specified for each outgoing RTP data block, instead use
+ RTPQueueBase::setPayloadFormat each time the payload type changes.
+
+'PayloadType'
+ The definition of payload types has deeply changed in order to
+ allow all standard uses of dynamic payload negotiation. Refer to
+ *note Payload Types and Formats::, for an explanation of the new
+ payload types and formats related classes.
+
+ For example, 'RTP_PAYLOAD_PCMU' must be replaced with something
+ like 'StaticPayloadFormat pcmu(sptPCMU)', where 'pcmu' is the name
+ of a static payload object that binds an statically assigned
+ 'PayloadType' (2). to its corresponding RTP clock rate(3).
+
+'RTPSocket::Connect'
+ The call connect has been removed. Now, in order to send packets
+ to a destination 'OutgoingDataQueue::addDestination' must be used.
+ It allows for setting more than one destination. Any destination
+ can actually be added more than one time with addDestination, which
+ can be used a simple trick to perform redundant transmission: each
+ packet -both RTP and RTCP- will be transmitted to the destination
+ as many times as it has been added to the list of destinations
+ through calling addDestination.
+
+'RTPQueue::getCurrentRate'
+ Replace with 'RTPQueueBase::getCurrentRTPClockRate()'.
+
+'RTPSocket::Start'
+ Replace with 'RTPSession::startRunning'.
+
+'RTPQueue::gotHello'
+ Replace with 'QueueRTCPManager::onNewSyncSource'.
+
+'RTPQueue::gotGoodbye'
+ Replace with 'QueueRTCPManager::onGotGoodbye'.
+
+ ---------- Footnotes ----------
+
+ (1) Note that unfortunately ccRTP 1.0pre0 used '#include
+<cc++/rtp/rtp.h', which is now deprecated.
+
+ (2) The static payload type 0 corresponds to the audio format PCMU,
+see 'RFC 3550'.
+
+ (3) 8 khz.
+
+
+File: ccrtp.info, Node: ccRTP Internals, Next: Related Work, Prev: Upgrading, Up: Top
+
+8 ccRTP Internals
+*****************
+
+* Menu:
+
+* Internals Overview:: ccRTP internals overview.
+* Collisions and Loops:: Collision Resolution and Loop Detection.
+* Algorithms in the Standard:: Implementation of algorithms in the standard.
+
+
+File: ccrtp.info, Node: Internals Overview, Next: Collisions and Loops, Up: ccRTP Internals
+
+8.1 Internals Overview
+======================
+
+_TODO: Explain where on how timer reconsideration/reverse recons. is
+performed_.
+
+ Performance:
+
+ * Zero copy stack.
+ * RW/R multithreading.
+ * Fast specialized linked list and hash mechanisms.
+
+
+File: ccrtp.info, Node: Collisions and Loops, Next: Algorithms in the Standard, Prev: Internals Overview, Up: ccRTP Internals
+
+8.2 Collisions and Loops
+========================
+
+ccRTP performs loop detection (following 8.2 in 'RFC 3550', though the
+algorithm in ccRTP differs is structure because of two reasons:
+
+ * ccRTP holds a table of source for which some packet has been
+ received, instead of a table with all the sources in the session
+ (i.e. the local source is not included in the table unless it
+ sends packets to itself).
+
+ * RTP and RTCP packets are handled separately whereas the algorithm
+ in 8.2 treats both.
+
+ Note that the first two conditions in 8.2 (creating new source
+ entries and setting source transport address) are handled in the
+ SSRC bookkeeping methods rather than mixing them with the real
+ collisions and loop handling.
+
+ Unlike the algorithm given in 8.2, the ccRTP algorithm detects the
+ very rare case when two sources on the same host use the same SSRC
+ identifier and the first RTP packet for that identifier is received
+ from one source and the first RTCP is received from the other.
+
+
+File: ccrtp.info, Node: Algorithms in the Standard, Prev: Collisions and Loops, Up: ccRTP Internals
+
+8.3 Algorithms in the Standard
+==============================
+
+The following sections summarizes how the algorithms specified in
+appendixes from 'RFC 3550' are implemented in ccRTP. A "mapping" between
+routines in the RFC and methods/routines in ccRTP is provided.
+
+* Menu:
+
+* A.1:: RTP Data Header Validity Checks.
+* A.2:: RTCP Header Validity Checks.
+* A.3:: Determining the Number of RTP Packets Expected and Lost.
+* A.4:: Generating SDES RTCP Packets.
+* A.5:: Parsing RTCP SDES Packets.
+* A.6:: Generating a Random 32-bit Identifier.
+* A.7:: Computing the RTCP Transmission Interval.
+* A.8:: Estimating the Interarrival Jitter.
+
+
+File: ccrtp.info, Node: A.1, Next: A.2, Up: Algorithms in the Standard
+
+8.3.1 A.1
+---------
+
+ccRTP performs RTP data header validity check in two stages: the first
+stage, performed at the constructor of 'IncomingRTPPkt' (which is
+extensible with virtual methods) validates the header fields independent
+of the source. The second stage, performed at
+'IncomingDataQueue::checkSSRCInIncomingRTPPkt' and
+'QueueRTCPManager::checkSSRCInRTCPPkt', validates those fields specific
+to the source of the packet (number sequence, etc).
+
+ Additionally, the following table specifies which methods of ccRTP
+implement the functions init_seq and update_seq from A.1.
+
+'void init_seq(source*, u_int16)'
+ void MembershipBookkeeping::SyncSourceLink::initSequence(uint16)
+
+'int update_seq(source*, u_int16)'
+ bool RTPQueue::recordReception(SyncSourceLink&, const
+ IncomingRTPPkt&)
+
+
+File: ccrtp.info, Node: A.2, Next: A.3, Prev: A.1, Up: Algorithms in the Standard
+
+8.3.2 A.2
+---------
+
+The code in A.2 corresponds to
+'RTCPCompoundHandler::checkCompountRTCPHeader'.
+
+
+File: ccrtp.info, Node: A.3, Next: A.4, Prev: A.2, Up: Algorithms in the Standard
+
+8.3.3 A.3
+---------
+
+Code in A.3 corresponds to 'MembershipBookeeping::computeStats'.
+
+
+File: ccrtp.info, Node: A.4, Next: A.5, Prev: A.3, Up: Algorithms in the Standard
+
+8.3.4 A.4
+---------
+
+Code in A.4 is implemented as part of the method
+'QueueRTCPManager::packSDES'.
+
+
+File: ccrtp.info, Node: A.5, Next: A.6, Prev: A.4, Up: Algorithms in the Standard
+
+8.3.5 A.5
+---------
+
+Code in A.5 is implemented in the method 'QueueRTCPManager::onGotSDES',
+which calls the virtual method 'QueueRTCPManager::onGotSDESChunk' to
+process each SDES chunk.
+
+
+File: ccrtp.info, Node: A.6, Next: A.7, Prev: A.5, Up: Algorithms in the Standard
+
+8.3.6 A.6
+---------
+
+On POSIX systems, ccRTP uses '/dev/urandom' when available. If there is
+no such device, it defaults to the MD5 based algorithm given in appendix
+A.6.
+
+ Code in A.6 corresponds to 'uint32 MD5BasedRandom32()', which is
+called by 'uint32 random32()' when no random device is available.
+
+
+File: ccrtp.info, Node: A.7, Next: A.8, Prev: A.6, Up: Algorithms in the Standard
+
+8.3.7 A.7
+---------
+
+Mapping:
+
+'double rtcp_interval(int, int, double, int, double, int)'
+ virtual timeval QueueRTCPManager::computeRTCPInterval(), and in
+ timeval (seconds + microseconds) units, instead of seconds.
+
+'OnExpire(event, int, int, double, int, double, int time_tp, time_tp, int)'
+ QueueRTCPManager::runControlService(microtimeout_t) (this method
+ also implements part of SendRTCPReport(e))
+
+'OnReceive(packet, event, int, int, int, double, double, double, double)'
+ void QueueRTCPManager::takeInControlPacket() and
+ QueueRTCPManager::runControlService(microtimeout_t)
+
+'Schedule(time, event) and Reschedule(time, event)'
+ No equivalent.
+
+'SendRTCPReport(event)'
+ 'dispatchControlPacket'.
+
+'SendBYEPacket(event)'
+ 'QueueRTCPManager::dispatchBYE(const std::string& reason)'.
+
+'TypeOfEvent(event)'
+ No equivalent.
+
+'PacketType(p)'
+ No equivalent.
+
+'ReceivedPacketSize()'
+ 'size_t IncomingDataQueue::takeInDataPacket()'.
+
+'SentPacketSize()'
+ 'size_t OutgoingDataQueue::dispatchDataPacket()' -data, and 'size_t
+ QueueRTCPManager::dispatchControlPacket()' -control.
+
+'NewMember(p)'
+
+'NewSender(p)'
+
+'AddMember() and RemoveMember()'
+
+'AddSender() and RemoveSender()'
+
+
+File: ccrtp.info, Node: A.8, Prev: A.7, Up: Algorithms in the Standard
+
+8.3.8 A.8
+---------
+
+Interarrival jitter is estimated as specified in A.8, in
+'recordReception'. Jitter is kept as a float.
+
+
+File: ccrtp.info, Node: Related Work, Next: Future Work, Prev: ccRTP Internals, Up: Top
+
+9 Related Work
+**************
+
+_TODO_. Other free RTP stacks and tools:
+
+ * jrtplib
+
+ * oRTP
+
+ * LIVE.COM Streaming Media
+
+ * UCL Common Code Library. Note this library is distributed under a
+ BSD license _with_ the obnoxious clausule.
+
+
+File: ccrtp.info, Node: Future Work, Next: Licenses, Prev: Related Work, Up: Top
+
+10 Future Work
+**************
+
+_TODO_.
+
+
+File: ccrtp.info, Node: Licenses, Next: Class and Data Type Index, Prev: Future Work, Up: Top
+
+Appendix A Licenses
+*******************
+
+* Menu:
+
+* GNU Free Documentation License:: License for this document.
+* GNU General Public License:: ccRTP Base License.
+* GNU ccRTP Linking Exception:: ccRTP linking exception.
+
+
+File: ccrtp.info, Node: GNU General Public License, Next: GNU Free Documentation License, Prev: GNU Free Documentation License, Up: Licenses
+
+A.1 GNU GENERAL PUBLIC LICENSE
+==============================
+
+ Version 2, June 1991
+
+ Copyright © 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+A.1.1 Preamble
+--------------
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users. This General Public
+License applies to most of the Free Software Foundation's software and
+to any other program whose authors commit to using it. (Some other Free
+Software Foundation software is covered by the GNU Library General
+Public License instead.) You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it if
+you want it, that you can change the software or use pieces of it in new
+free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software,
+and (2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains a
+ notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License. The "Program",
+ below, refers to any such program or work, and a "work based on the
+ Program" means either the Program or any derivative work under
+ copyright law: that is to say, a work containing the Program or a
+ portion of it, either verbatim or with modifications and/or
+ translated into another language. (Hereinafter, translation is
+ included without limitation in the term "modification".) Each
+ licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running the Program is not restricted, and the output from the
+ Program is covered only if its contents constitute a work based on
+ the Program (independent of having been made by running the
+ Program). Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+ code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any
+ warranty; and give any other recipients of the Program a copy of
+ this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+ it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+
+ a. You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b. You must cause any work that you distribute or publish, that
+ in whole or in part contains or is derived from the Program or
+ any part thereof, to be licensed as a whole at no charge to
+ all third parties under the terms of this License.
+
+ c. If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display
+ an announcement including an appropriate copyright notice and
+ a notice that there is no warranty (or else, saying that you
+ provide a warranty) and that users may redistribute the
+ program under these conditions, and telling the user how to
+ view a copy of this License. (Exception: if the Program
+ itself is interactive but does not normally print such an
+ announcement, your work based on the Program is not required
+ to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Program, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not apply
+ to those sections when you distribute them as separate works. But
+ when you distribute the same sections as part of a whole which is a
+ work based on the Program, the distribution of the whole must be on
+ the terms of this License, whose permissions for other licensees
+ extend to the entire whole, and thus to each and every part
+ regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on a
+ volume of a storage or distribution medium does not bring the other
+ work under the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms
+ of Sections 1 and 2 above provided that you also do one of the
+ following:
+
+ a. Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Sections 1 and 2 above on a medium customarily used for
+ software interchange; or,
+
+ b. Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange; or,
+
+ c. Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with
+ such an offer, in accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete
+ source code means all the source code for all modules it contains,
+ plus any associated interface definition files, plus the scripts
+ used to control compilation and installation of the executable.
+ However, as a special exception, the source code distributed need
+ not include anything that is normally distributed (in either source
+ or binary form) with the major components (compiler, kernel, and so
+ on) of the operating system on which the executable runs, unless
+ that component itself accompanies the executable.
+
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify
+ or distribute the Program or its derivative works. These actions
+ are prohibited by law if you do not accept this License.
+ Therefore, by modifying or distributing the Program (or any work
+ based on the Program), you indicate your acceptance of this License
+ to do so, and all its terms and conditions for copying,
+ distributing or modifying the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject
+ to these terms and conditions. You may not impose any further
+ restrictions on the recipients' exercise of the rights granted
+ herein. You are not responsible for enforcing compliance by third
+ parties to this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot distribute so as to satisfy simultaneously
+ your obligations under this License and any other pertinent
+ obligations, then as a consequence you may not distribute the
+ Program at all. For example, if a patent license would not permit
+ royalty-free redistribution of the Program by all those who receive
+ copies directly or indirectly through you, then the only way you
+ could satisfy both it and this License would be to refrain entirely
+ from distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply
+ in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of
+ any such claims; this section has the sole purpose of protecting
+ the integrity of the free software distribution system, which is
+ implemented by public license practices. Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is
+ willing to distribute software through any other system and a
+ licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces,
+ the original copyright holder who places the Program under this
+ License may add an explicit geographical distribution limitation
+ excluding those countries, so that distribution is permitted only
+ in or among countries not thus excluded. In such case, this
+ License incorporates the limitation as if written in the body of
+ this License.
+
+ 9. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies to
+ it and "any later version", you have the option of following the
+ terms and conditions either of that version or of any later version
+ published by the Free Software Foundation. If the Program does not
+ specify a version number of this License, you may choose any
+ version ever published by the Free Software Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted by
+ the Free Software Foundation, write to the Free Software
+ Foundation; we sometimes make exceptions for this. Our decision
+ will be guided by the two goals of preserving the free status of
+ all derivatives of our free software and of promoting the sharing
+ and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
+ AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+ DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
+ OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+ MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+ INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+ OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+ OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+A.1.2 Appendix: How to Apply These Terms to Your New Programs
+-------------------------------------------------------------
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
+ Copyright (C) YYYY NAME OF AUTHOR
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Also add information on how to contact you by electronic and paper
+mail.
+
+ If the program is interactive, make it output a short notice like
+this when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+ The hypothetical commands 'show w' and 'show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than 'show w' and 'show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+ You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the program,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ SIGNATURE OF TY COON, 1 April 1989
+ Ty Coon, President of Vice
+
+ This General Public License does not permit incorporating your
+program into proprietary programs. If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library. If this is what you want to do, use the
+GNU Library General Public License instead of this License.
+
+
+File: ccrtp.info, Node: GNU Free Documentation License, Next: GNU ccRTP Linking Exception, Prev: GNU General Public License, Up: Licenses
+
+A.2 GNU Free Documentation License
+==================================
+
+ Version 1.2, November 2002
+
+ Copyright © 2000,2001,2002 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled "History" in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warrany Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided for under this License. Any other
+ attempt to copy, modify, sublicense or distribute the Document is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <http://www.gnu.org/copyleft/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation.
+
+A.2.1 ADDENDUM: How to use this License for your documents
+----------------------------------------------------------
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: ccrtp.info, Node: GNU ccRTP Linking Exception, Prev: GNU Free Documentation License, Up: Licenses
+
+A.3 GNU ccRTP Linking Exception
+===============================
+
+As a special exception to the GNU General Public License, permission is
+granted for additional uses of the text contained in its release of
+ccRTP.
+
+ The exception is that, if you link the ccRTP library with other files
+to produce an executable, this does not by itself cause the resulting
+executable to be covered by the GNU General Public License. Your use of
+that executable is in no way restricted on account of linking the ccRTP
+library code into it.
+
+ This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+
+ This exception applies only to the code released under the name
+ccRTP. If you copy code from other releases into a copy of ccRTP, as the
+General Public License permits, the exception does not apply to the code
+that you add in this way. To avoid misleading anyone as to the status
+of such modified files, you must delete this exception notice from them.
+
+ If you write modifications of your own for ccRTP, it is your choice
+whether to permit this exception to apply to your modifications. If you
+do not wish that, delete this exception notice.
+
+
+File: ccrtp.info, Node: Class and Data Type Index, Next: Method and Function Index, Prev: Licenses, Up: Top
+
+Class and Data Type Index
+*************************
+
+
+* Menu:
+
+* AppDataUnit: ccRTP Overview. (line 57)
+* AppDataUnit <1>: ccRTP Overview. (line 57)
+* DynamicPayloadFormat: ccRTP Overview. (line 57)
+* DynamicPayloadFormat <1>: Payload Types and Formats.
+ (line 52)
+* DynamicPayloadType: Upgrading. (line 57)
+* IncomingRTPPkt: RTP Packets Extensions.
+ (line 6)
+* OutgoingRTPPkt: RTP Packets Extensions.
+ (line 6)
+* Participant: ccRTP Overview. (line 57)
+* Participant <1>: Participants. (line 6)
+* PayloadFormat: Payload Types and Formats.
+ (line 25)
+* PayloadType: Payload Types and Formats.
+ (line 6)
+* RTPApplication: Participants. (line 6)
+* RTPPacket: RTP Packets Extensions.
+ (line 6)
+* RTPSession: ccRTP Overview. (line 45)
+* RTPSession <1>: ccRTP Overview. (line 57)
+* RTPSession <2>: Initiating Sessions. (line 6)
+* RTPSession <3>: Participants. (line 6)
+* RTPSource: Upgrading. (line 30)
+* StaticPayloadFormat: ccRTP Overview. (line 57)
+* StaticPayloadFormat <1>: Payload Types and Formats.
+ (line 35)
+* StaticPayloadType: ccRTP Overview. (line 57)
+* StaticPayloadType <1>: Payload Types and Formats.
+ (line 6)
+* StaticPayloadType <2>: Payload Types and Formats.
+ (line 35)
+* StaticPayloadType <3>: Upgrading. (line 57)
+* SyncSource: ccRTP Overview. (line 57)
+* SyncSource <1>: Participants. (line 6)
+* SyncSource <2>: Upgrading. (line 30)
+
+
+File: ccrtp.info, Node: Method and Function Index, Next: Concept Index, Prev: Class and Data Type Index, Up: Top
+
+Method and Function Index
+*************************
+
+
+* Menu:
+
+* ccxx_sleep: Upgrading. (line 22)
+* defaultApplication: Initiating Sessions. (line 30)
+* defaultApplication <1>: Participants. (line 62)
+* defaultApplication <2>: Upgrading. (line 39)
+* DynamicPayloadFormat::DynamicPayloadFormat: Payload Types and Formats.
+ (line 52)
+* exit: Upgrading. (line 16)
+* getMRSenderInfo: ccRTP Overview. (line 45)
+* IncomingDataQueue::checkSSRCInIncomingRTPPkt: A.1. (line 6)
+* IncomingDataQueue::getData: Receiving Data. (line 6)
+* IncomingDataQueue::getData <1>: Upgrading. (line 42)
+* IncomingDataQueue::isWaiting: Receiving Data. (line 17)
+* IncomingDataQueue::onExpireRecv: RTP Packets Expiration.
+ (line 6)
+* IncomingDataQueue::onNewSyncSource: Synchronization Source States.
+ (line 6)
+* IncomingDataQueue::onRTPPacketRecv: RTP Packets Arrival. (line 6)
+* IncomingDataQueue::recordReception: A.8. (line 6)
+* IncomingDataQueue::takeInDataPacket: A.7. (line 35)
+* MembershipBookkeeping::SyncSourceLink::computeStats: A.3. (line 6)
+* onGotSR: ccRTP Overview. (line 45)
+* OutgoingDataQueue::addDestination: Initiating Sessions. (line 25)
+* OutgoingDataQueue::dispatchDataPacket: A.7. (line 38)
+* OutgoingDataQueue::onExpireSend: RTP Packets Expiration.
+ (line 6)
+* OutgoingDataQueue::putData: Sending Data. (line 6)
+* OutgoingDataQueue::putData <1>: Upgrading. (line 51)
+* OutgoingDataQueue::setMark: Sending Data. (line 11)
+* OutgoingDataQueue::setPadding: Initiating Sessions. (line 38)
+* OutgoingDataQueue::setSchedulingTimeout: Upgrading. (line 46)
+* OutgoingDataQueueBase::getDefaultMaxSendSegmentSize: Sending Data.
+ (line 16)
+* OutgoingDataQueueBase::setMaxSendSegmentSize: Sending Data. (line 16)
+* QueueRTCPMaanger::setControlBandwidth: Initiating Sessions. (line 45)
+* QueueRTCPManager::checkSSRCInRTCPPkt: A.1. (line 6)
+* QueueRTCPManager::dispatchBYE: A.7. (line 26)
+* QueueRTCPManager::dispatchControlPacket: A.7. (line 23)
+* QueueRTCPManager::dispatchControlPacket <1>: A.7. (line 38)
+* QueueRTCPManager::end2EndDelayed: RTP Packets Expiration.
+ (line 8)
+* QueueRTCPManager::onGotAPP: RTCP Packets Arrival. (line 15)
+* QueueRTCPManager::onGotGoodbye: Upgrading. (line 87)
+* QueueRTCPManager::onGotRR: RTCP Packets Arrival. (line 11)
+* QueueRTCPManager::onGotRRSRExtension: RTCP Packets Arrival. (line 17)
+* QueueRTCPManager::onGotSDES: A.5. (line 6)
+* QueueRTCPManager::onGotSDESChunk: RTCP Packets Arrival. (line 13)
+* QueueRTCPManager::onGotSR: RTCP Packets Arrival. (line 9)
+* QueueRTCPManager::onNewSyncSource: Upgrading. (line 84)
+* QueueRTCPManager::onSSRCCollision: SSRC Collisions. (line 6)
+* QueueRTCPManager::packSDES: A.4. (line 6)
+* RTCPCompoundHandler::checkCompountRTCPHeader: A.2. (line 6)
+* RTPApplication: Participants. (line 62)
+* RTPApplication::getSDESItem: Upgrading. (line 39)
+* RTPApplication::ParticipantsIterator: Participants. (line 75)
+* RTPApplication::ParticipantsIterator <1>: Participants. (line 87)
+* RTPApplication::setPRIVPrefix: Initiating Sessions. (line 30)
+* RTPPApplication::setSDESItem: Initiating Sessions. (line 30)
+* RTPQueue::getCNAME: Upgrading. (line 39)
+* RTPQueue::getCurrentRate: Upgrading. (line 78)
+* RTPQueue::getLocalInfo: Upgrading. (line 36)
+* RTPQueue::getLocalSSRC: Upgrading. (line 36)
+* RTPQueue::getPacket: Upgrading. (line 42)
+* RTPQueue::gotGoodbye: Upgrading. (line 87)
+* RTPQueue::gotHello: Upgrading. (line 84)
+* RTPQueue::putPacket: Upgrading. (line 51)
+* RTPQueue::setTimeout: Upgrading. (line 46)
+* RTPQueueBase::getCurrentRTPClockRate: Upgrading. (line 78)
+* RTPQueueBase::setPayloadFormat: Initiating Sessions. (line 27)
+* RTPQueueBase::setPayloadFormat <1>: Upgrading. (line 51)
+* RTPSession::enableStack: Initiating Sessions. (line 15)
+* RTPSession::startRunning: Initiating Sessions. (line 15)
+* RTPSession::startRunning <1>: Upgrading. (line 81)
+* RTPSession::SyncSourcesIterator: Participants. (line 35)
+* RTPSocket::Start: Upgrading. (line 81)
+* StaticPayloadFormat::StaticPayloadFormat: Payload Types and Formats.
+ (line 41)
+* SyncSource::getParticipant(): Participants. (line 37)
+* Thread::sleep: Upgrading. (line 22)
+* Thread::terminate: Upgrading. (line 19)
+
+
+File: ccrtp.info, Node: Concept Index, Prev: Method and Function Index, Up: Top
+
+Concept Index
+*************
+
+
+* Menu:
+
+* /dev/urandom: ccRTP Overview. (line 42)
+* /dev/urandom <1>: A.6. (line 6)
+* A.1: A.1. (line 6)
+* A.2: A.2. (line 6)
+* A.3: A.3. (line 6)
+* A.4: A.4. (line 6)
+* A.5: A.5. (line 6)
+* A.6: A.6. (line 6)
+* A.7: A.7. (line 6)
+* A.8: A.8. (line 6)
+* Algoritms in the Standard: Algorithms in the Standard.
+ (line 6)
+* APP: RTCP Packets Arrival. (line 15)
+* Audio/Video Working Group: Introduction. (line 6)
+* AVPF: Standards Tracking. (line 25)
+* AVPF <1>: Standards Tracking. (line 27)
+* C++: Introduction. (line 6)
+* ccRTP Internals: ccRTP Internals. (line 6)
+* ccRTP Overview: ccRTP Overview. (line 6)
+* class framework: Introduction. (line 6)
+* clock rate: Payload Types and Formats.
+ (line 25)
+* Closing Sessions: Closing Sessions. (line 6)
+* CNAME: Initiating Sessions. (line 30)
+* CNAME <1>: Participants. (line 12)
+* CNAME <2>: Participants. (line 62)
+* collision: SSRC Collisions. (line 6)
+* Collisions and Loops: Collisions and Loops. (line 6)
+* Common C++: Introduction. (line 6)
+* Common C++ <1>: Introduction. (line 19)
+* const iterator: Participants. (line 35)
+* const iterator <1>: Participants. (line 75)
+* const iterator <2>: Participants. (line 87)
+* default bandwidth: Initiating Sessions. (line 45)
+* default value: Initiating Sessions. (line 27)
+* default value <1>: Initiating Sessions. (line 30)
+* default value <2>: Initiating Sessions. (line 45)
+* default value <3>: Sending Data. (line 11)
+* default value <4>: Sending Data. (line 16)
+* default value <5>: Participants. (line 62)
+* demo program: ccRTP Overview. (line 45)
+* demo program <1>: ccRTP Overview. (line 65)
+* destination: Upgrading. (line 67)
+* distribution: Distribution. (line 6)
+* duplicate packets: Receiving Data. (line 14)
+* FDL, GNU Free Documentation License: GNU Free Documentation License.
+ (line 6)
+* free software: Distribution. (line 6)
+* Future, Future Work: Future Work. (line 6)
+* GNU ccRTP Linking Exception: GNU ccRTP Linking Exception.
+ (line 6)
+* GNU FDL: Distribution. (line 6)
+* GNU GPL: Distribution. (line 6)
+* H.245: Payload Types and Formats.
+ (line 25)
+* H.323: Introduction. (line 38)
+* Handling Events: Handling Events. (line 6)
+* header check: ccRTP Overview. (line 33)
+* header check <1>: A.2. (line 6)
+* header validity: ccRTP Overview. (line 33)
+* header validity <1>: A.2. (line 6)
+* IANA: Payload Types and Formats.
+ (line 20)
+* IETF: Introduction. (line 6)
+* IETF <1>: Standards Tracking. (line 6)
+* IETF standards: Standards Tracking. (line 6)
+* incoming queue: Using ccRTP. (line 17)
+* Initiating Sessions: Initiating Sessions. (line 6)
+* interarrival jitter: A.8. (line 6)
+* Internals Overview: Internals Overview. (line 6)
+* Internet Ingeneering Task Force: Introduction. (line 6)
+* Introduction: Introduction. (line 6)
+* iterator: Participants. (line 35)
+* iterator <1>: Participants. (line 75)
+* iterator <2>: Participants. (line 87)
+* jitter: A.8. (line 6)
+* join: Initiating Sessions. (line 6)
+* linking exception: Distribution. (line 6)
+* loop detection: ccRTP Overview. (line 38)
+* marker bit: Sending Data. (line 11)
+* MD5: Introduction. (line 19)
+* MD5 <1>: ccRTP Overview. (line 42)
+* MD5 <2>: A.6. (line 6)
+* MIME: Payload Types and Formats.
+ (line 25)
+* multicast: Initiating Sessions. (line 6)
+* outgoing queue: Using ccRTP. (line 24)
+* packet queue: ccRTP Overview. (line 9)
+* packet queue <1>: Using ccRTP. (line 6)
+* padding: Initiating Sessions. (line 38)
+* Participant: Participants. (line 6)
+* participant: Participants. (line 37)
+* Payload Formats: Payload Types and Formats.
+ (line 6)
+* payload type: Upgrading. (line 51)
+* Payload Types: Payload Types and Formats.
+ (line 6)
+* PCMU: Initiating Sessions. (line 27)
+* philosophy: Distribution. (line 6)
+* PRIV: Initiating Sessions. (line 30)
+* profile: Standards Tracking. (line 23)
+* Random numbers: ccRTP Overview. (line 42)
+* Random numbers <1>: A.6. (line 6)
+* Receiving Data: Receiving Data. (line 6)
+* reception queue: Using ccRTP. (line 17)
+* reconsideration: ccRTP Overview. (line 40)
+* redundancy: Upgrading. (line 67)
+* Related work: Related Work. (line 6)
+* reordering: Receiving Data. (line 14)
+* reverse reconsideration: ccRTP Overview. (line 40)
+* RR: RTCP Packets Arrival. (line 11)
+* RTCP APP: RTCP Packets Arrival. (line 15)
+* RTCP bandwidth: Initiating Sessions. (line 45)
+* RTCP compound packets: Initiating Sessions. (line 30)
+* RTCP header: A.2. (line 6)
+* RTCP Packet Arrival: RTCP Packets Arrival. (line 6)
+* RTCP packets: Initiating Sessions. (line 30)
+* RTCP Packets Extensions: RTCP Packets Extensions.
+ (line 6)
+* RTCP RR: RTCP Packets Arrival. (line 11)
+* RTCP SDES: RTCP Packets Arrival. (line 13)
+* RTCP SR: ccRTP Overview. (line 45)
+* RTCP SR <1>: RTCP Packets Arrival. (line 9)
+* RTCP-based feedback: Standards Tracking. (line 25)
+* RTCP-based feedback <1>: Standards Tracking. (line 27)
+* RTP clock rate: Payload Types and Formats.
+ (line 25)
+* RTP Packet Arrival: RTP Packets Arrival. (line 6)
+* RTP Packets Expiration: RTP Packets Expiration.
+ (line 6)
+* RTP Packets Extensions: RTP Packets Extensions.
+ (line 6)
+* RTP parameters: Payload Types and Formats.
+ (line 20)
+* RTP Sessions: RTP Sessions. (line 6)
+* RTP timestamp offset: Sending Data. (line 6)
+* rtphello: ccRTP Overview. (line 45)
+* rtplisten: ccRTP Overview. (line 45)
+* RTSP: Introduction. (line 38)
+* SAVPF: Standards Tracking. (line 29)
+* SDES: RTCP Packets Arrival. (line 13)
+* SDES item: Initiating Sessions. (line 30)
+* SDP: Payload Types and Formats.
+ (line 25)
+* Secure RTP: Standards Tracking. (line 23)
+* segment size: Sending Data. (line 16)
+* Sending Data: Sending Data. (line 6)
+* Session control: Payload Types and Formats.
+ (line 66)
+* Session Description Protocol: Payload Types and Formats.
+ (line 25)
+* signalization: Introduction. (line 38)
+* Simple Receiver: Simple Receiver. (line 6)
+* Simple Transmitter: Simple Transmitter. (line 6)
+* SIP: Introduction. (line 38)
+* sockets: Introduction. (line 19)
+* Source of Synchronization: Participants. (line 6)
+* Specialized Payload Formats: Specialized Payload Formats.
+ (line 6)
+* SR: ccRTP Overview. (line 45)
+* SR <1>: RTCP Packets Arrival. (line 9)
+* SRE Extension: RTCP Packets Arrival. (line 17)
+* SRTP: Standards Tracking. (line 23)
+* SSRC collision: ccRTP Overview. (line 38)
+* SSRC Collision: SSRC Collisions. (line 6)
+* SSRC collision <1>: SSRC Collisions. (line 6)
+* Standards tracking: Standards Tracking. (line 6)
+* static payload type: Initiating Sessions. (line 27)
+* synchronization: Introduction. (line 19)
+* Synchronization Source States: Synchronization Source States.
+ (line 6)
+* system services: Introduction. (line 19)
+* thread: Using ccRTP. (line 6)
+* threading: Introduction. (line 19)
+* timer reconsideration: ccRTP Overview. (line 40)
+* timestamp clock rate: Payload Types and Formats.
+ (line 25)
+* timestamp offset: Sending Data. (line 6)
+* transmission queue: Using ccRTP. (line 24)
+* Types of Sessions: Types of Sessions. (line 6)
+* Upgrading: Upgrading. (line 6)
+* Using ccRTP: Using ccRTP. (line 6)
+
+
+
+Tag Table:
+Node: Top835
+Node: Introduction2053
+Ref: Introduction-Footnote-15463
+Node: Distribution5540
+Node: ccRTP Overview6817
+Node: Simple Transmitter10161
+Node: Simple Receiver10870
+Node: Using ccRTP11860
+Node: RTP Sessions14467
+Node: Initiating Sessions15139
+Node: Sending Data17471
+Node: Receiving Data18855
+Node: Closing Sessions19842
+Node: Types of Sessions20636
+Node: Payload Types and Formats20965
+Ref: Payload Types and Formats-Footnote-124202
+Node: Participants24303
+Node: RTP Packets Extensions29196
+Node: RTCP Packets Extensions29580
+Node: Handling Events29895
+Node: RTP Packets Arrival30546
+Node: RTP Packets Expiration30991
+Node: RTCP Packets Arrival31236
+Node: Synchronization Source States31837
+Node: SSRC Collisions32063
+Node: Specialized Payload Formats32263
+Node: Standards Tracking32532
+Node: Upgrading33466
+Ref: Upgrading-Footnote-136707
+Ref: Upgrading-Footnote-236811
+Ref: Upgrading-Footnote-336899
+Node: ccRTP Internals36914
+Node: Internals Overview37263
+Node: Collisions and Loops37612
+Node: Algorithms in the Standard38793
+Node: A.139652
+Node: A.240534
+Node: A.340724
+Node: A.440900
+Node: A.541090
+Node: A.641367
+Node: A.741764
+Node: A.843083
+Node: Related Work43286
+Node: Future Work43631
+Node: Licenses43759
+Node: GNU General Public License44127
+Node: GNU Free Documentation License63394
+Node: GNU ccRTP Linking Exception85836
+Node: Class and Data Type Index87162
+Node: Method and Function Index89926
+Node: Concept Index95857
+
+End Tag Table
+
+
+Local Variables:
+coding: iso-8859-1
+End:
diff --git a/doc/ccrtp.texi b/doc/ccrtp.texi
new file mode 100644
index 0000000..d3782e8
--- /dev/null
+++ b/doc/ccrtp.texi
@@ -0,0 +1,1507 @@
+\input texinfo @c -*-texinfo-*-
+@c %** start of header
+@setfilename ccrtp.info
+@settitle GNU ccRTP Manual
+@afourpaper
+@setchapternewpage odd
+@documentlanguage en
+@documentencoding ISO-8859-1
+@c %** end of header
+
+@set EDITION 1.3
+@set VERSION 1.3
+@set UPDATED Jan 2006
+
+@dircategory Development
+@direntry
+* GNU ccRTP: (ccrtp). GNU ccRTP Real-Time Transport Protocol Framework.
+@end direntry
+
+
+@c -----------------------------------------------------------------------
+
+@c %** start of summary description and copyright
+@ifnottex
+GNU ccRTP is a C++ class framework for the development of Real Time
+Transport Protocol (@acronym{RTP}) based applications. It is based on
+GNU Common C++.
+
+Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006 Federico Montesino Pouzols
+@email{fedemp@@altern.org}.
+@include fdlnotice.texi
+@end ifnottex
+@c %** end of summary description and copyright
+
+@c -----------------------------------------------------------------------
+
+@c %** start of title and copyright page
+@shorttitlepage @titlefont{GNU ccRTP}
+@titlepage
+@sp 10
+@title GNU ccRTP Manual
+@subtitle A Real-Time Transport Protocol Framework based on GNU Common C++
+@subtitle @value{EDITION}th Edition, covering ccRTP version @value{VERSION}
+@subtitle @value{UPDATED}
+@author Federico Montesino Pouzols
+
+@page
+@vskip 0pt plus 1filll
+@center Copyright @copyright{} 2001, 2002, 2003, 2004, 2005 Federico Montesino Pouzols
+@include fdlnotice.texi
+@page
+@end titlepage
+@c %** end of title and copyright page
+
+
+@c -----------------------------------------------------------------------
+
+@c %** start of top node and master menu
+@ifnottex
+@node Top
+@top
+This manual describes GNU ccRTP, a C++ class framework for the
+development of Real Time Transport Protocol (@acronym{RTP}) based
+applications.
+
+This is the edition @value{EDITION} of this manual and documents
+GNU ccRTP version @value{VERSION}.
+@end ifnottex
+
+
+@contents
+
+
+@menu
+* Introduction:: What @acronym{RTP} and ccRTP are.
+* Distribution:: How to get @acronym{GNU} ccRTP.
+* ccRTP Overview:: The library at a glance.
+* Using ccRTP:: Programming with GNU ccRTP overview.
+* Specialized Payload Formats:: Supported payload specific extensions.
+* Standards Tracking:: @acronym{IETF} Standards conformance.
+* Upgrading:: Upgrading applications based on old releases.
+* ccRTP Internals:: How @acronym{GNU} ccRTP is done.
+* Related Work:: Other @acronym{RTP} related libraries and tools.
+* Future Work:: Future of @acronym{RTP} and ccRTP.
+* Licenses:: Library and documentation licenses.
+* Class and Data Type Index:: Index of classes and data types in ccRTP.
+* Method and Function Index:: Index of methods and functions in ccRTP.
+* Concept Index:: Index of concepts.
+@end menu
+@c %** end of top node and master menu
+
+@c %** start of body
+
+@c -----------------------------------------------------------------------
+@node Introduction
+@chapter Introduction
+@cindex Introduction
+
+@cindex Common C++
+@cindex C++
+@cindex IETF
+@cindex Internet Ingeneering Task Force
+@cindex Audio/Video Working Group
+@cindex class framework
+ccRTP is a C++ framework for developing applications based on the Real
+Time Transport Protocol (@acronym{RTP} henceforth). @acronym{RTP}
+provides end-to-end delivery services for data with real-time
+characteristics and is being developed by the Audio/Video Working
+Group of the Internet Engineering Task Force (@acronym{IETF}).
+
+ccRTP aims to be an efficient and flexible framework valid for almost
+any kind of application that uses @acronym{RTP}, ranging from high
+loaded servers and gateways to personal phone applications. Default
+constructs and values are provided however for the most common choices
+in the use of @acronym{RTP}. ccRTP conforms to the latest
+@acronym{RTP} specifications (@pxref{Standards Tracking}).
+
+@cindex MD5
+@cindex Common C++
+@cindex system services
+@cindex threading
+@cindex synchronization
+@cindex sockets
+ccRTP is based on the @acronym{GNU} Common C++ framework, though most
+of the library does not require it. Common C++ provides basic system
+services such as threading, synchronization and sockets@footnote{As
+well as other more specialized services, such as MD5 computation.},
+which makes it possible to provide a complete solution for the use of
+@acronym{RTP}. However, although ccRTP provides facilities and
+abstractions useful for the @acronym{RTP} specific components of
+applications that use @acronym{RTP}, such applications generally
+require similar system services for other tasks. Besides supporting
+ccRTP, Common C++ provides a portable and efficient framework for
+these kind of services.
+
+@acronym{RTP} has been defined as an application level protocol
+framework rather than a typical Internet transport protocol such as
+TCP and UDP. Thus, @acronym{RTP} is hardly ever implemented as a layer
+separated from the application. Consequently, @acronym{RTP}
+applications often must customize the adaptable @acronym{RTP} packet
+layout and processing rules, timing constraints, session membership
+rules as well as other @acronym{RTP} and @acronym{RTCP}
+mechanisms. ccRTP aims to provide a framework for the @acronym{RTP}
+framework, rather than being just an @acronym{RTP} packet manipulation
+library.
+
+@cindex signalization
+@cindex RTSP
+@cindex SIP
+@cindex H.323
+As a clarification of the scope of the ccRTP library and the
+@acronym{RTP} protocol, we note that ccRTP exclusively deals with the
+transport of data over the @acronym{RTP} protocol. Once parameters such
+as destination IP address and transport port, payload type identifier
+and timestamp frequency are known, ccRTP can be used to open an
+@acronym{RTP} session and send and receive RTP and RTCP packets. A
+multimedia application will have those parameters previously set or,
+more usually, they can be fetched for example from SDP multimedia
+session descriptions, which can be interchanged (and negotiated) between
+servers and clients by means of some signaling protocol: @acronym{SIP},
+@acronym{RTSP}, or even H.323. Signaling functions are not handled by
+ccRTP.
+
+This document is an introductory programmer's manual, for a more
+exhaustive reference see the reference manual distributed with GNU
+ccRTP. In @ref{ccRTP Overview}, the most important concepts and some
+basic examples are introduced. A deeper and step by step description
+as well as short examples are provided in @ref{Using ccRTP}.
+
+Finally, if after reading this document and/or using ccRTP you think
+it fails to provide some functionality that seems to be needed for
+some application, we encourage you to contact the developers of ccRTP
+and ask or propose them improvements and/or additions. You are also
+encouraged to provide these improvements and to join the development
+team. Bug reports, suggestions and criticisms are gladly accepted.
+
+
+@c -----------------------------------------------------------------------
+@node Distribution
+@chapter Distribution
+@cindex distribution
+
+@cindex free software
+@cindex GNU GPL
+@cindex linking exception
+@cindex GNU FDL
+@cindex philosophy
+@acronym{GNU} ccRTP is free software (see
+@url{http://www.gnu.org/philosophy/philosophy.html}. It is licensed
+under the terms of the @acronym{GNU} General Public License, @xref{GNU
+General Public License}, plus a linking exception, @xref{GNU ccRTP
+Linking Exception}.
+
+The linking exception is the same that is used for gcc libstdc++. This
+was done in the case of libstdc++ because the language of the LGPL is
+neither clear nor correct if one uses C++ features such as templates and
+method implimentation directly in headers, as the division between the
+C++ library and another's application is no longer purely a linking one.
+From the practical standpoint, the exact effect is the same as the LGPL,
+but with language that matches these C++ features. This is all
+explained at
+@url{http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/license.html}.
+
+This manual is licensed under the terms of the @acronym{GNU} Free
+Documentation License, @xref{GNU Free Documentation License}.
+
+There are several ways to get @acronym{GNU} ccRTP, refer to
+@url{http://www.gnu.org} and
+@url{http://www.gnu.org/software/ccrtp/}. The development of ccRTP is
+hosted at Savannah @url{http://sv.gnu.org/projects/ccrtp/}.
+
+
+@c -----------------------------------------------------------------------
+@node ccRTP Overview
+@chapter ccRTP Overview
+@cindex ccRTP Overview
+
+At its highest level, ccRTP provides classes for the real-time
+transport of data through @acronym{RTP} sessions, as well as the
+control functions of @acronym{RTCP}.
+
+@cindex packet queue
+The main concept in the ccRTP implementation of @acronym{RTP} sessions
+is the use of packet queues to handle transmission and reception of
+@acronym{RTP} data packets/application data units. In ccRTP, a data
+block is transmitted by putting it into the transmission (outgoing
+packets) queue, and received by getting it from the reception
+(incoming packets) queue.
+
+Starting with 1.0 releases, ccRTP fully supports @acronym{RTP} and
+@acronym{RTCP}. Here is a brief list of some features of ccRTP:
+
+@itemize
+
+@item Highly extensible to specialized stacks.
+
+@item Supports unicast, multi-unicast and multicast. Handles multiple sources (including synchronization sources and contributing sources) and destinations. Also supports symmetric RTP.
+
+@item Automatic RTCP functions handling, such as association of synchronization sources from the same participant or NTP-RTP timestamp mapping.
+
+@item Genericity as for underlying network and transport protocols through templates.
+
+@item It is threadsafe and supports almost any threading model.
+
+@cindex header check
+@cindex header validity
+@item Generic and extensible @acronym{RTP} and @acronym{RTCP} header validity checks.
+
+@item Handles source states and information as well as statistics recording.
+
+@cindex SSRC collision
+@cindex loop detection
+@item Automatically handles SSRC collisions and performs loop detection.
+
+@cindex reconsideration
+@cindex timer reconsideration
+@cindex reverse reconsideration
+@item Implements timer reconsideration and reverse reconsideration.
+
+@cindex Random numbers
+@cindex /dev/urandom
+@cindex MD5
+@item Provides good random numbers, based on @file{/dev/urandom} or, alternatively, on MD5.
+
+@end itemize
+
+@cindex demo program
+@cindex rtphello
+@cindex rtplisten
+@tindex RTPSession
+@findex onGotSR
+@findex getMRSenderInfo
+@cindex SR
+@cindex RTCP SR
+There are several levels of interface (public interface, public or
+protected inheritance, etc) in ccRTP. For instance, the
+@code{rtphello} demo program distributed with ccRTP just uses the
+public interface of the @code{RTPSession} class and does not redefine
+the virtual method @code{onGotSR}, thus what this program knows about
+SR reports is the information conveyed in the last sender report from
+any source, which can be retrieved via the @code{getMRSenderInfo}
+method of the @code{SyncSource} class. On the contrary, the
+@code{rtplisten} demo program redefines @code{onGotSR} by means of
+inheritance and could do specialized processing of these RTCP
+packets. Generally, both data and control packets are not directly
+accessible through the most external interface.
+
+@tindex StaticPayloadType
+@tindex StaticPayloadFormat
+@tindex DynamicPayloadFormat
+@tindex RTPSession
+@tindex AppDataUnit
+@tindex SyncSource
+@tindex Participant
+@tindex AppDataUnit
+All these functions are performed through a few essential classes and
+types. The most basic ones are the enumerated type
+@code{StaticPayloadType}, and the classes @code{StaticPayloadFormat} and
+@code{DynamicPayloadFormat}. The most important ones are the classes
+@code{RTPSession}, @code{SyncSource}, @code{Participant} and
+@code{AppDataUnit}, that represent @acronym{RTP} sessions,
+synchronization sources, participants in an @acronym{RTP} application,
+and application data units conveyed in @acronym{RTP} data packets,
+respectively.
+
+@cindex demo program
+In the next sections, two basic examples are presented. These examples
+are intended to provide a concrete idea of what the code of a ccRTP
+based application looks like, they are not complete or compilable
+programs. You can find some real examples under the demo directory in
+the source distribution of ccRTP.
+
+@menu
+* Simple Transmitter:: Skeleton of a simple transmitter.
+* Simple Receiver:: Skeleton of a simple receiver.
+@end menu
+
+
+@c -----------------------------------------------------------------------
+@node Simple Transmitter
+@section Simple Transmitter
+@cindex Simple Transmitter
+
+The following snippet illustrates the required steps to send an
+application data unit over @acronym{RTP}.
+
+@cartouche
+@example
+RTPSession s(InetHostAddress("127.0.0.1"),8000); // @r{bind reception socket}
+
+// @r{Initialization}
+cout << "Local SSRC identifier: " << s.getLocalSSRC() << endl;
+s.addDestination("www.example.com",9000); // @r{set one destination for packets}
+s.setPayloadFormat(staticPayloadFormat(sptPCMU));
+s.startRunning(); // @r{start running the packet queue scheduler}
+
+// @r{Send data}
+s.putData(0,buffer,bufferLen); // @r{buffer holds bufferLen payload octets}
+@end example
+@end cartouche
+
+
+@c -----------------------------------------------------------------------
+@node Simple Receiver
+@section Simple Receiver
+@cindex Simple Receiver
+
+The required actions to receive an application data unit over RTP are
+listed in the following code snippet.
+
+@cartouche
+@example
+RTPSession s(InetHostAddress("127.0.0.1"),9000); // @r{bind reception socket.}
+
+// @r{Initialization.}
+cout << "Local SSRC identifier: " << s.getLocalSSRC() << endl;
+s.setPayloadFormat(staticPayloadFormat(sptPCMU));
+s.startRunning(); // @r{start running the packet queue scheduler.}
+
+// @r{Receive data.}
+const AppDataUnit* adu;
+adu = s.getData(0); // @r{get data with initial -0- timestamp.}
+if ( adu != NULL )
+ // @r{do something with adu.}
+ // adu->getType() @r{provides the payload type.}
+ // adu->getData() @r{provides a const uint8 pointer to a data buffer.}
+ // adu->getSize() @r{provides the number of octets in the buffer.}
+ // @r{see other methods in the class AppDataUnit, such as} getSource().
+@end example
+@end cartouche
+
+
+@c -----------------------------------------------------------------------
+@node Using ccRTP
+@chapter Using ccRTP
+@cindex Using ccRTP
+
+@cindex packet queue
+@cindex thread
+When using ccRTP, both sending and receiving of data transported over
+@acronym{RTP} sessions is done through reception and transmission
+queues handled by the @acronym{RTP} stack. In the most common case, a
+separate execution thread for each @acronym{RTP} session handles the
+queues. This case is the threading model that we will generally assume
+throughout this document. Note however that ccRTP supports other
+threading models, particularly ccRTP supports the use of a single
+execution thread to serve a set of @acronym{RTP} sessions. It is also
+possible to not associate any separate thread with any @acronym{RTP}
+session, manually calling the main data and control service methods
+from whatever other thread.
+
+@cindex reception queue
+@cindex incoming queue
+The basic idea for packet reception with ccRTP is that the application
+does not directly read packets from sockets but gets them from a
+reception queue. The stack is responsible for inserting received
+packets in the reception queue and handling this queue. In general, a
+packet reception and insertion in the reception queue does not occur
+at the same time the application gets it from the queue.
+
+@cindex transmission queue
+@cindex outgoing queue
+Conversely, the basic idea for packet transmission with ccRTP is that
+packets are not directly written to sockets but inserted in a
+transmission queue handled by the stack. In general, packet insertion
+and transmission occur at different times, though it is not necessary.
+
+In order to use ccRTP, you must include the main header
+(@file{#include <ccrtp/rtp.h>}. Two additional headers are provided by
+ccRTP:
+
+@table @code
+
+@item @file{#include <ccrtp/rtppool.h}
+Classes for pools of RTP service threads.
+
+@item @file{#include <ccrtp/rtpext.h>}
+Classes for RTP extensions which are not mature yet.
+
+@end table
+
+You must also link in the library, currently @file{ccrtp1}.
+
+As presented in the last examples, before starting to send or receive
+data, RTP sessions must be created, the payload format to use must be
+set and the stack must be signaled to start running. The following
+sections describe the use of ccRTP during the different phases of RTP
+sessions and RTP applications in general.
+
+@menu
+* RTP Sessions:: Using ccRTP to establish @acronym{RTP} sessions.
+* Payload Types and Formats:: Payload types and formats.
+* Participants:: Participants and sources of synchronization.
+* RTP Packets Extensions:: Extensions to @acronym{RTP} data packets handling.
+* RTCP Packets Extensions:: Extensions to @acronym{RTCP} packets handling.
+* Handling Events:: Table of ccRTP plug-ins to react to events.
+@end menu
+
+
+@c -----------------------------------------------------------------------
+@node RTP Sessions
+@section RTP Sessions
+@cindex RTP Sessions
+
+This section discusses the use of @code{RTPSession} objects. Some
+other classes and concepts are also used, these are just briefly
+presented here; deeper explanations are provided in next sections.
+
+@menu
+* Initiating Sessions:: @acronym{RTP} sessions initialization with ccRTP.
+* Sending Data:: Sending @acronym{RTP} data packets.
+* Receiving Data:: Receiving @acronym{RTP} data packets.
+* Closing Sessions:: Extensions to @acronym{RTP} data packets handling.
+* Types of Sessions:: Choosing a threading and socket model.
+@end menu
+
+
+@c -----------------------------------------------------------------------
+@node Initiating Sessions
+@subsection Initiating Sessions
+@cindex Initiating Sessions
+
+@tindex RTPSession
+@cindex multicast
+@cindex join
+Initiating @acronym{RTP} sessions with ccRTP involves the construction
+of an object of the class @code{RTPSession} and calling some optional
+initialization methods. @code{RTPSession} constructors take two
+mandatory arguments: local network address and local transport port
+(where incoming packets are expected). There are two constructors, one
+of them takes a host address as first parameter, while the other takes
+a multicast address. In the latter case, the application will join to
+a multicast group.
+
+@findex RTPSession::startRunning
+@findex RTPSession::enableStack
+General purpose @acronym{RTP} stacks of ccRTP, such as
+@code{RTPSession} objects, must be signaled to start execution. This
+is done calling the @code{startRunning()} method. Note there is also a
+@code{enableStack()} method, this only activates the stack but does not
+start the execution of the stack thread.
+
+After the steps above, the application can receive data, but will not
+transmit to any destination. This and other session parameters can be
+set as follows:
+
+@itemize
+
+@findex OutgoingDataQueue::addDestination
+@item Add destinations: calling the method @code{addDestination}.
+
+@findex RTPQueueBase::setPayloadFormat
+@cindex static payload type
+@cindex PCMU
+@cindex default value
+@item Set payload format. Method @code{setPayloadFormat}. By default, the static payload type 0 is assumed (PCMU format at 8Khz).
+
+@cindex RTCP packets
+@cindex RTCP compound packets
+@cindex SDES item
+@cindex CNAME
+@cindex default value
+@cindex PRIV
+@findex RTPPApplication::setSDESItem
+@findex RTPApplication::setPRIVPrefix
+@findex defaultApplication
+@item Set local SDES Items. For common applications, the CNAME item value is automatically guessed as user@@host. Other items have no default value and are not sent in RTCP packets unless a value is specified by the application. For those items that should be sent in @acronym{RTCP} packets along with the mandatory CNAME, its values can be set calling the @code{setSDESItem} and @code{setPRIVPrefix} methods over the object returned by the @code{defaultApplication} global function.
+
+@findex OutgoingDataQueue::setPadding
+@cindex padding
+@item Enable padding of data packets. Calling setPadding(uint8) on outgoing data queues enables transparent padding of data packets to a multiple of the padding maximum length specified. By default, padding is off (maximum length of padding is 0).
+
+@item setting addresses:
+
+
+@findex QueueRTCPMaanger::setControlBandwidth
+@cindex default value
+@cindex default bandwidth
+@cindex RTCP bandwidth
+@item Set session bandwidth calling the @code{setSessionBandwidth} method of the session object. If not called, a default bandwidth of 64Kbps is assumed, and 5% of this bandwidth is used for RTCP. This percentage can be changed through the setControlBandwidth method.
+
+@end itemize
+
+
+@c -----------------------------------------------------------------------
+@node Sending Data
+@subsection Sending Data
+@cindex Sending Data
+
+@findex OutgoingDataQueue::putData
+@cindex RTP timestamp offset
+@cindex timestamp offset
+Data packets are sent through the method @code{putData}, that takes as
+first parameter the RTP timestamp for the data specified as second
+parameter. ccRTP handles the random offset for the RTP timestamp
+internally, so the timestamp value that corresponds to the session
+creation time is 0.
+
+@findex OutgoingDataQueue::setMark
+@cindex default value
+@cindex marker bit
+By default, the marker bit of the sent packets is not set. Its value
+for the next packet (the one that will convey the data provided in the
+next call to @code{putData}) can be set through the @code{setMark}
+method, which takes a boolean as argument.
+
+@findex OutgoingDataQueueBase::setMaxSendSegmentSize
+@findex OutgoingDataQueueBase::getDefaultMaxSendSegmentSize
+@cindex default value
+@cindex segment size
+ccRTP also supports fragmenting data blocks into several RTP
+packets. The @code{setMaxSendSegmentSize} method can be used to
+request that no @acronym{RTP} packet be transmitted with a payload
+length greater than the value specified through
+@code{setMaxSendSegmentSize}. The default value of this parameter can
+be retrieved via @code{getDefaultMaxSendSegmentSize}, which currently
+should return 65536. When data blocks greater than the maximum segment
+size are provided through @code{putData}, two or more packet will be
+inserted in the outgoing packet queue. All these packets but the last
+one will have length equal to the maximum segment size, whereas the
+last one's size will be lower or equal to the maximum segment size.
+
+
+@c -----------------------------------------------------------------------
+@node Receiving Data
+@subsection Receiving Data
+@cindex Receiving Data
+
+@findex IncomingDataQueue::getData
+Received data is retrieved from the incoming packet queue through the
+@code{getData} method, which, given a timestamp and an optional source
+of synchronization. This method returns a pointer to an
+@code{AppDataUnit} object as opposed to a pointer to a memory
+block. In ccRTP application data units are represented through objects
+of the @code{AppDataUnit} class, that provides access to the
+synchronization source of the data and other related properties.
+
+@cindex duplicate packets
+@cindex reordering
+The incoming packet queue takes care of functions such as packet
+reordering or filtering out duplicate packets.
+
+@findex IncomingDataQueue::isWaiting
+You can guess if there are packets in the reception queue calling
+@code{isWaiting}. Both @code{getData} and @code{isWaiting} take an
+optional parameter which selects a particular synchronization source
+of data units. If not specified, data units are returned regardless of
+its source.
+
+
+@c -----------------------------------------------------------------------
+@node Closing Sessions
+@subsection Closing Sessions
+@cindex Closing Sessions
+
+RTP sessions can be closed deleting or destroying @code{RTPSession}
+objects. The stack sends a BYE packet to every destination when the
+destructor of sessions is called. It is also possible to explicitly send
+a BYE packet through the dispatchBYE method, which takes the leaving
+reason string as argument. Note that dispatchBYE will honor a number of
+rules for sending BYE packets specified in the RTP standard: a BYE
+packet is not sent if no RTP/RTCP packet was sent, and BYE floods
+avoiding mechanisms are employed.
+
+Note that when a BYE RTCP packet is received from a remote
+participant, the virtual @code{onGotGoodbye} will be called.
+
+@c -----------------------------------------------------------------------
+@node Types of Sessions
+@subsection Types of Sessions
+@cindex Types of Sessions
+
+@emph{TODO:} explain how to instantiate templates depending on the
+threading model and the number of sockets to use. Also symmetric
+channels/sessions. Describe what's a channel and a session.
+
+
+@c -----------------------------------------------------------------------
+@node Payload Types and Formats
+@section Payload Types and Formats
+@cindex Payload Types
+@cindex Payload Formats
+
+@tindex PayloadType
+@tindex StaticPayloadType
+In the context of @acronym{RTP}, an @acronym{RTP} payload type is a
+7-bit numeric identifier that identifies a payload format. For
+payload types, GNU ccRTP defines the integer type
+@code{PayloadType}. ccRTP also defines The enumerated type
+@code{StaticPayloadType}, as the enumeration of the @acronym{RTP}
+Payload Types statically assigned for standard audio and video
+formats.
+
+These codes were initially specified in @cite{RFC 1890, ``RTP Profile
+for Audio and Video Conferences with Minimal Control'' (AVP profile)},
+superseded by @cite{RFC 3550}, and are registered as MIME types in
+@cite{RFC 3555}. Codes below 96 may be assigned statically, although
+the default bindings for many of them are already reserverd. Codes in
+the range 96-127 are assigned dinamically by means outside of the
+@acronym{RTP} profile or protocol specification.
+
+@cindex IANA
+@cindex RTP parameters
+See the ``RTP Parameters'' list at @acronym{IANA}
+@url{http://www.iana.org/assignments/rtp-parameters}. Note however
+that registering static payload types is now considered a deprecated
+practice in favor of dynamic payload type negotiation.
+
+@tindex PayloadFormat
+
+@cindex MIME
+@cindex SDP
+@cindex Session Description Protocol
+@cindex H.245
+@cindex clock rate
+@cindex timestamp clock rate
+@cindex RTP clock rate
+The properties of a payload format that, as an @acronym{RTP} stack,
+ccRTP takes into account are the payload type (numeric identifier) and
+the @acronym{RTP} clock rate. Other properties, such as @acronym{MIME}
+type, number of audio channels, ``ptime'' and ``maxptime'' are not
+considered. These are only of interest for higher level protocols,
+such as @acronym{SDP} and H.245.
+
+GNU ccRTP defines a hierarchy of payload format classes. Its root is
+@code{PayloadFormat}, which is a base class for
+@code{StaticPayloadFormat} and @code{DynamicPayloadFormat}.
+
+@tindex StaticPayloadFormat
+@tindex StaticPayloadType
+Static payload format objects are built from a static payload
+code. These are defined in the enumerated type
+@code{StaticPayloadType}. The following example constructs a
+@code{StaticPayloadFormat} object corresponding to the payload type 0
+(statically bounded to PCMA in @cite{RFC 3551}):
+
+@findex StaticPayloadFormat::StaticPayloadFormat
+@example
+StaticPayloadType pt = sptPCMU;
+StaticPayloadFormat* spf = new StaticPayloadFormat(pt);
+@end example
+
+Of course, we could have said:
+
+@example
+StaticPayloadFormat* spf = new StaticPayloadFormat(sptPCMA);
+@end example
+
+StaticPayloadFormat objects build like the ones above hold the
+necessary parameters so that the @acronym{RTP} stack can handle
+incoming and outgoing packets.
+
+@tindex DynamicPayloadFormat
+@findex DynamicPayloadFormat::DynamicPayloadFormat
+Regarding dynamic payload formats, a call to
+@code{DynamicPayloadFormat::DynamicPayloadFormat(100,90000)} like the
+following:
+
+@example
+DynamicPayloadFormat* dpf = new DynamicPayloadFormat(100,90000);
+@end example
+
+Will construct a dynamic payload format object that ties together the
+'100' payload type numeric identifier and an @acronym{RTP} clock rate
+of 90 Khz. Note that the numeric identifier does not have to be in the
+dynamic range. The static payload types are default bindings and MAY
+be overridden, thus, DynamicPayloadFormat(0,90000) is a valid construct
+provided 0 has been established as the payload type through a previous
+negotiation process@footnote{Despite the fact that RFC 3551 defines a
+static binding of the 0 code to mu-law PCM at 8Khz.}.
+
+@cindex Session control
+Whether and how the payload has been negotiated is outside of the
+scope of @acronym{RTP} and ccRTP, so applications must choose between
+@code{StaticPayloadFormat} and @code{DynamicPayloadFormat} accordingly
+to their multimedia session control mechanisms.
+
+
+@c -----------------------------------------------------------------------
+@node Participants
+@section Participants And Sources of Synchronization
+@cindex Source of Synchronization
+@cindex Participant
+
+@tindex RTPApplication
+@tindex Participant
+@tindex SyncSource
+@tindex RTPSession
+In GNU ccRTP, there are classes that represent @acronym{RTP}
+applications (@code{RTPApplication}), participants
+(@code{Participant}), synchronizacion sources (@code{SyncSource}) and
+RTP sessions (@code{RTPSession}). The relations among these entities
+are shown in the following diagram:
+
+@image{srcmodel,8cm,,Relations between applications, participants,
+sources and sessions}
+
+@cindex CNAME
+An @acronym{RTP} application establishes a space of CNAME identifiers,
+whereas an @acronym{RTP} session establishes a space of SSRC
+identifiers.
+
+For each source of synchronization seen in an @acronym{RTP} session, a
+@code{SyncSource} object identified by a SSRC numeric identifier is
+created. Thus, at the beginning of an @acronym{RTP} session there are
+no @code{SyncSource} objects related. Note that, if the local source
+sends packets to itself during an @acronym{RTP} session, a
+@code{SyncSource} object will be created for it.
+
+The list of sources of synchronization identified in an RTP session
+can be retrived through STL-like iterators of type
+@code{RTPSession::SyncSourcesIterator}, as shown in the following
+example.
+
+@cartouche
+@example
+// rx is an RTPSession object
+RTPSession::SyncSourcesIterator it;
+for (it = rx.begin() ; it != rx.end(); it++) @{
+ const SyncSource &s = *it;
+ cout << s.getID();
+ if ( s.isSender() )
+ cout << "is an active sender";
+ cout << endl;
+@}
+@end example
+@end cartouche
+
+@findex RTPSession::SyncSourcesIterator
+@cindex const iterator
+@cindex iterator
+Note @code{RTPSession::SyncSourcesIterator} is a const iterator.
+
+@findex SyncSource::getParticipant()
+@cindex participant
+When using RTCP, it is possible to associate several synchronization
+source objects to a participant in the multimedia session, which is
+represented through the association between @code{Participant} and
+@code{SyncSource} objects. The participant object linked to a source
+of synchronization can be retrieved through the
+@code{SyncSource::getParticipant()} method, as the following examples
+shows:
+
+@cartouche
+@example
+ // s is a source of synchronization object (SyncSource)
+ Participant *p = s.getParticipant();
+ cerr << p->getSDESItem(SDESItemTypeCNAME) << endl;
+@end example
+@end cartouche
+
+When RTCP is not being used or the CNAME identifier corresponding to a
+synchronization source has not been received yet, the participant
+associated with a synchronization source is not known. In these cases,
+the method @code{SyncSource::getParticipant()} will return a NULL
+pointer. On the contrary, a participant is always related to a
+synchronization source at least. It can also be related to more than
+one synchronization source (for instance, when a participant in a
+videoconference sends two video streams from two different
+chameras). Note that, if the local source sends data and control
+packets to itself, a @code{Participant} object will be created for it.
+
+Thus, the @code{SyncSource::getParticipant} provides a facility for
+inter-media synchronization.
+
+@findex defaultApplication
+@findex RTPApplication
+@cindex default value
+@cindex CNAME
+The association of @acronym{RTP} sessions and participants with
+@code{RTPApplication} objects makes it possible to implement several
+``RTP applications'' in the same application or process, each one
+having a separate CNAME space. By default, all @acronym{RTP} sessions
+are associated to an @acronym{RTP} application provided by the global
+method @code{defaultApplication()}. The local CNAME for the default
+application is guessed from the user and machine name, as specified in
+@cite{RFC 3550}.
+
+However, other applications may be created through the constructor
+@code{RTPApplication::RTPApplication(const std::string& cname)}. @acronym{RTP} sessions are associated with applications other
+than the default via an optional constructor parameter.
+
+@findex RTPApplication::ParticipantsIterator
+@cindex const iterator
+@cindex iterator
+Similarly to the list of synchronization sources, the list of
+participants in a session can be retrieved using iterators of type
+@code{RTPApplication::ParticipantsIterator}, see the following
+example, which shows the list of CNAMEs of the participants in the
+default application:
+
+@cartouche
+@example
+ RTPApplication &app = defaultApplication();
+ RTPApplication::ParticipantsIterator ai;
+ for ( ai = app.begin(); ai != app.end(); ai++ ) @{
+ const Participant &p = *ai;
+ cerr << p.getSDESItem(SDESItemTypeCNAME) << endl;
+ @}
+@end example
+@end cartouche
+
+@findex RTPApplication::ParticipantsIterator
+@cindex const iterator
+@cindex iterator
+Note @code{RTPApplication::ParticipantsIterator} is a const iterator.
+
+@emph{TODO: SyncSource states}.
+
+
+@c -----------------------------------------------------------------------
+@node RTP Packets Extensions
+@section RTP Packets Extensions
+@cindex RTP Packets Extensions
+
+@tindex RTPPacket
+@tindex IncomingRTPPkt
+@tindex OutgoingRTPPkt
+@emph{TODO.} Describe @code{RTPPacket}, @code{IncomingRTPPkt} and
+@code{OutgoingRTPPkt} classes. @xref{RTP Packets Arrival}, for a
+discussion of event handling virtuals that allow for specialized
+processing of data packets.
+
+
+@c -----------------------------------------------------------------------
+@node RTCP Packets Extensions
+@section RTCP Packets Extensions
+@cindex RTCP Packets Extensions
+
+@xref{RTCP Packets Arrival}, for a discussion of event handling
+virtuals that allow for specialized processing of control packets.
+
+
+@c -----------------------------------------------------------------------
+@node Handling Events
+@comment node-name, next, previous, up
+@section Handling Events
+@cindex Handling Events
+
+There are a number of events that may require special response from
+the application. ccRTP defines plug-ins to handle these events.
+
+@menu
+* RTP Packets Arrival:: Filtering and extending @acronym{RTP} packets parsing.
+* RTCP Packets Arrival:: Filtering and extending @acronym{RTCP} packets parsing.
+* Synchronization Source States:: Handling state transitions.
+* SSRC Collisions:: Handling SSRC identifier collisions.
+* RTP Packets Expiration:: Outgoing and incoming @acronym{RTP} packets expiration.
+@end menu
+
+
+@c -----------------------------------------------------------------------
+@node RTP Packets Arrival
+@comment node-name, next, previous, up
+@subsection RTP Packets Arrival
+@cindex RTP Packet Arrival
+
+@findex IncomingDataQueue::onRTPPacketRecv
+@code{onRTPPacketRecv} is the virtual method that may be redefined in
+any subclass of @code{IncomingDataQueue}, particularly in subclasses
+of @code{RTPSession}. It takes an @code{IncomingRTPPkt} object as
+argument and returns a boolean indicating whether the packet should be
+inserted in the reception queue.
+
+
+@c -----------------------------------------------------------------------
+@node RTP Packets Expiration
+@comment node-name, next, previous, up
+@subsection RTP Packets Expiration
+@cindex RTP Packets Expiration
+
+@findex OutgoingDataQueue::onExpireSend
+@findex IncomingDataQueue::onExpireRecv
+@code{onExpireSend} and @code{onExpireRecv}
+
+@findex QueueRTCPManager::end2EndDelayed
+@code{end2EndDelayed}
+
+
+@c -----------------------------------------------------------------------
+@node RTCP Packets Arrival
+@comment node-name, next, previous, up
+@subsection RTCP Packets Arrival
+@cindex RTCP Packet Arrival
+Incoming RTCP packets are automatically handled by ccRTP. However,
+this does not mean you can't track the reception of RTCP packets.
+
+@itemize
+
+@cindex SR
+@cindex RTCP SR
+@findex QueueRTCPManager::onGotSR
+@item @code{onGotSR}
+
+@cindex RR
+@cindex RTCP RR
+@findex QueueRTCPManager::onGotRR
+@item @code{onGotRR}
+
+@cindex SDES
+@cindex RTCP SDES
+@findex QueueRTCPManager::onGotSDESChunk
+@item @code{onGotSDESChunk}
+
+@cindex APP
+@cindex RTCP APP
+@findex QueueRTCPManager::onGotAPP
+@item @code{onGotAPP}
+
+@cindex SRE Extension
+@findex QueueRTCPManager::onGotRRSRExtension
+@item @code{onGotRRSRExtension}
+
+@end itemize
+
+Note that this events correspond to RTCP packets, not RTCP compound
+packets, and probably the reception of a compound packet will trigger
+more than one of these events.
+
+
+@c -----------------------------------------------------------------------
+@node Synchronization Source States
+@comment node-name, next, previous, up
+@subsection Synchronization Source States
+@cindex Synchronization Source States
+
+@findex IncomingDataQueue::onNewSyncSource
+@code{onNewSyncSource}.
+
+
+@c -----------------------------------------------------------------------
+@node SSRC Collisions
+@comment node-name, next, previous, up
+@subsection SSRC Collisions
+@cindex SSRC Collision
+
+@cindex collision
+@cindex SSRC collision
+@findex QueueRTCPManager::onSSRCCollision
+@code{onSSRCCollision}.
+
+@c -----------------------------------------------------------------------
+@node Specialized Payload Formats
+@chapter Specialized Payload Formats
+@cindex Specialized Payload Formats
+
+@emph{TODO:} finish 2833bis and CN.
+
+@emph{TODO:} comment H.261 specific RTCP packets: FIR and NACK.
+
+
+@c -----------------------------------------------------------------------
+@node Standards Tracking
+@chapter Standards Tracking
+@cindex Standards tracking
+
+@cindex IETF
+@cindex IETF standards
+
+@emph{TODO: explain what is done/being done/planned}.
+
+@itemize
+
+@item @cite{RTP: A Transport Protocol for Real-Time Applications (RFC 3550, which supersedes RFC 1889)}.
+
+@item @cite{RTP Profile for Audio and Video Conferences with Minimal Control (RFC 3551, which supersedes RFC 1890)}.
+
+@item @cite{MIME Type Registration of RTP Payload Formats (RFC 3555)}.
+
+@item @cite{IANA RTP Parameters}.
+
+@item @cite{RTP Payload Format for H.261 Video Streams (RFC 2032)}. Defines H.261 specific FIR and NACK RTCP packets.
+
+
+@end itemize
+
+@itemize
+
+Not yet implemented:
+
+@cindex profile
+@cindex SRTP
+@cindex Secure RTP
+@item @cite{The Secure Real-time Transport Protocol}. SRTP provile.
+
+@cindex AVPF
+@cindex RTCP-based feedback
+@item @cite{Extended RTP Profile for RTCP-based Feedback (RTP/AVPF)}.
+
+@cindex AVPF
+@cindex RTCP-based feedback
+@item @cite{Extended RTP Profile for RTCP-based Feedback (RTP/AVPF)}.
+
+@cindex SAVPF
+@item @cite{Extended Secure RTP Profile for RTCP-based Feedback (RTP/SAVPF)}.
+
+@end itemize
+
+
+@c -----------------------------------------------------------------------
+@node Upgrading
+@chapter Upgrading
+@cindex Upgrading
+
+This chapter outlines the main steps required to upgrade applications
+written for old releases of ccRTP (0.6.x, 0.7.x and 0.9.x series) to
+the 1.0 series. It is written mostly as a recipe of replacements for
+old constructs.
+
+Replace @code{#include <cc++/rtp.h>} with @code{#include
+<ccrtp/rtp.h>}@footnote{Note that unfortunately ccRTP 1.0pre0 used
+@code{#include <cc++/rtp/rtp.h}, which is now deprecated.}.
+
+Changes that have to do more with Common C++ 2 than with ccRTP:
+
+@table @code
+
+@item exit(int)
+@findex exit
+Replace with exit()
+
+@item Thread::Terminate()
+@findex Thread::terminate
+Replace with Thread::terminate()
+
+@item ccxx_sleep(timeout_t)
+@findex ccxx_sleep
+@findex Thread::sleep
+Replace with sleep(timeout_t).
+
+@item Thread::Run()
+Replace with Thread::run()
+
+@end table
+
+Changes required by ccRTP itself:
+
+@table @code
+@item RTPSource
+@tindex RTPSource
+@tindex SyncSource
+Now @code{SyncSource}, and is a somewhat different concept. For
+instance, calls to RTPSource::getID() must be replaced with calls to
+SyncSource::getID(), which in most cases will not imply any change to
+this part of the code.
+
+@item RTPQueue::getLocalInfo()->getID()
+@findex RTPQueue::getLocalInfo
+@findex RTPQueue::getLocalSSRC
+Replace with @code{RTPQueueBase::getLocalSSRC()}
+
+@item RTPQueue::getCNAME()
+@findex RTPQueue::getCNAME
+@findex defaultApplication
+@findex RTPApplication::getSDESItem
+Replace with @code{defaultApplication().getSDESItem(SDESItemTypeSDES)}.
+
+@item RTPQueue::getPacket()
+@findex RTPQueue::getPacket
+@findex IncomingDataQueue::getData
+@code{getPacket()} has been removed and now there is only a
+@code{getData()} method in the @acronym{RTP} queues.
+
+@item RTPQueue::setTimeout()
+@findex RTPQueue::setTimeout
+@findex OutgoingDataQueue::setSchedulingTimeout
+Replace calls to RTPQueue::setTimeout(microtimeout_t) with calls to
+OutgoingDataQueue(microtimeout_t), whose purpose and working is
+exactly the same.
+
+@item RTPQueue::putPacket()
+@findex RTPQueue::putPacket
+@findex OutgoingDataQueue::putData
+@cindex payload type
+@findex RTPQueueBase::setPayloadFormat
+@code{putPacket()} has been removed and now there is only a
+@code{putData()} method in the @acronym{RTP} queues. Note also that now the
+payload type is not specified for each outgoing @acronym{RTP} data block,
+instead use RTPQueueBase::setPayloadFormat each time the payload type
+changes.
+
+@item PayloadType
+@tindex DynamicPayloadType
+@tindex StaticPayloadType
+The definition of payload types has deeply changed in order to allow
+all standard uses of dynamic payload negotiation. Refer to
+@ref{Payload Types and Formats}, for an explanation of the new payload
+types and formats related classes.
+
+For example, @code{RTP_PAYLOAD_PCMU} must be replaced with something
+like @code{StaticPayloadFormat pcmu(sptPCMU)}, where @code{pcmu} is
+the name of a static payload object that binds an statically assigned
+@code{PayloadType} @footnote{The static payload type 0 corresponds to
+the audio format PCMU, see @cite{RFC 3550}.}. to its corresponding
+@acronym{RTP} clock rate@footnote{8 khz.}.
+
+@cindex destination
+@cindex redundancy
+@item RTPSocket::Connect
+The call connect has been removed. Now, in order to send packets to a
+destination @code{OutgoingDataQueue::addDestination} must be used. It
+allows for setting more than one destination. Any destination can
+actually be added more than one time with addDestination, which can be
+used a simple trick to perform redundant transmission: each packet -both
+RTP and RTCP- will be transmitted to the destination as many times as it
+has been added to the list of destinations through calling
+addDestination.
+
+@item RTPQueue::getCurrentRate
+@findex RTPQueue::getCurrentRate
+@findex RTPQueueBase::getCurrentRTPClockRate
+Replace with @code{RTPQueueBase::getCurrentRTPClockRate()}.
+
+@item RTPSocket::Start
+@findex RTPSocket::Start
+@findex RTPSession::startRunning
+Replace with @code{RTPSession::startRunning}.
+
+@item RTPQueue::gotHello
+@findex RTPQueue::gotHello
+@findex QueueRTCPManager::onNewSyncSource
+Replace with @code{QueueRTCPManager::onNewSyncSource}.
+
+@item RTPQueue::gotGoodbye
+@findex RTPQueue::gotGoodbye
+@findex QueueRTCPManager::onGotGoodbye
+Replace with @code{QueueRTCPManager::onGotGoodbye}.
+
+@end table
+
+
+@c -----------------------------------------------------------------------
+@node ccRTP Internals
+@comment node-name, next, previous, up
+@chapter ccRTP Internals
+@cindex @acronym{ccRTP} Internals
+
+
+@menu
+* Internals Overview:: ccRTP internals overview.
+* Collisions and Loops:: Collision Resolution and Loop Detection.
+* Algorithms in the Standard:: Implementation of algorithms in the standard.
+@end menu
+
+
+@c -----------------------------------------------------------------------
+@node Internals Overview
+@section Internals Overview
+@cindex Internals Overview
+
+@emph{TODO: Explain where on how timer reconsideration/reverse recons. is
+performed}.
+
+Performance:
+
+@itemize
+@item Zero copy stack.
+@item RW/R multithreading.
+@item Fast specialized linked list and hash mechanisms.
+@end itemize
+
+@c -----------------------------------------------------------------------
+@node Collisions and Loops
+@section Collisions and Loops
+@cindex Collisions and Loops
+
+ccRTP performs loop detection (following 8.2 in @cite{RFC 3550},
+though the algorithm in ccRTP differs is structure because of two
+reasons:
+
+@itemize
+
+@item ccRTP holds a table of source for which some packet has been received, instead of a table with all the sources in the session (i.e. the local source is not included in the table unless it sends packets to itself).
+
+@item RTP and RTCP packets are handled separately whereas the algorithm in 8.2 treats both.
+
+Note that the first two conditions in 8.2 (creating new source entries
+and setting source transport address) are handled in the SSRC
+bookkeeping methods rather than mixing them with the real collisions
+and loop handling.
+
+Unlike the algorithm given in 8.2, the ccRTP algorithm detects the
+very rare case when two sources on the same host use the same SSRC
+identifier and the first @acronym{RTP} packet for that identifier is
+received from one source and the first RTCP is received from the
+other.
+
+@end itemize
+
+@c -----------------------------------------------------------------------
+@node Algorithms in the Standard
+@section Algorithms in the Standard
+@cindex Algoritms in the Standard
+
+The following sections summarizes how the algorithms specified in
+appendixes from @cite{RFC 3550} are implemented in ccRTP. A
+``mapping'' between routines in the RFC and methods/routines in ccRTP
+is provided.
+
+@menu
+* A.1:: @acronym{RTP} Data Header Validity Checks.
+* A.2:: RTCP Header Validity Checks.
+* A.3:: Determining the Number of @acronym{RTP} Packets Expected and Lost.
+* A.4:: Generating SDES RTCP Packets.
+* A.5:: Parsing RTCP SDES Packets.
+* A.6:: Generating a Random 32-bit Identifier.
+* A.7:: Computing the RTCP Transmission Interval.
+* A.8:: Estimating the Interarrival Jitter.
+@end menu
+
+
+@c -----------------------------------------------------------------------
+@node A.1
+@subsection A.1
+@cindex A.1
+
+@findex IncomingDataQueue::checkSSRCInIncomingRTPPkt
+@findex QueueRTCPManager::checkSSRCInRTCPPkt
+ccRTP performs @acronym{RTP} data header validity check in two stages:
+the first stage, performed at the constructor of @code{IncomingRTPPkt}
+(which is extensible with virtual methods) validates the header fields
+independent of the source. The second stage, performed at
+@code{IncomingDataQueue::checkSSRCInIncomingRTPPkt} and
+@code{QueueRTCPManager::checkSSRCInRTCPPkt}, validates those fields
+specific to the source of the packet (number sequence, etc).
+
+Additionally, the following table specifies which methods of ccRTP
+implement the functions init_seq and update_seq from A.1.
+
+@table @code
+
+@item void init_seq(source*, u_int16)
+void MembershipBookkeeping::SyncSourceLink::initSequence(uint16)
+
+@item int update_seq(source*, u_int16)
+bool RTPQueue::recordReception(SyncSourceLink&, const IncomingRTPPkt&)
+
+@end table
+
+@c -----------------------------------------------------------------------
+@node A.2
+@subsection A.2
+@cindex A.2
+
+@cindex header check
+@cindex header validity
+@cindex RTCP header
+@findex RTCPCompoundHandler::checkCompountRTCPHeader
+The code in A.2 corresponds to
+@code{RTCPCompoundHandler::checkCompountRTCPHeader}.
+
+
+@c -----------------------------------------------------------------------
+@node A.3
+@subsection A.3
+@cindex A.3
+
+@findex MembershipBookkeeping::SyncSourceLink::computeStats
+Code in A.3 corresponds to @code{MembershipBookeeping::computeStats}.
+
+
+@c -----------------------------------------------------------------------
+@node A.4
+@subsection A.4
+@cindex A.4
+
+@findex QueueRTCPManager::packSDES
+Code in A.4 is implemented as part of the method
+@code{QueueRTCPManager::packSDES}.
+
+
+@c -----------------------------------------------------------------------
+@node A.5
+@subsection A.5
+@cindex A.5
+
+@findex QueueRTCPManager::onGotSDES
+Code in A.5 is implemented in the method
+@code{QueueRTCPManager::onGotSDES}, which calls the virtual method
+@code{QueueRTCPManager::onGotSDESChunk} to process each SDES chunk.
+
+
+@c -----------------------------------------------------------------------
+@node A.6
+@subsection A.6
+@cindex A.6
+
+@cindex Random numbers
+@cindex /dev/urandom
+@cindex MD5
+On POSIX systems, ccRTP uses @file{/dev/urandom} when available. If
+there is no such device, it defaults to the MD5 based algorithm given
+in appendix A.6.
+
+Code in A.6 corresponds to @code{uint32 MD5BasedRandom32()}, which is
+called by @code{uint32 random32()} when no random device is available.
+
+
+@c -----------------------------------------------------------------------
+@node A.7
+@subsection A.7
+@cindex A.7
+
+Mapping:
+
+@table @code
+
+@item double rtcp_interval(int, int, double, int, double, int)
+virtual timeval QueueRTCPManager::computeRTCPInterval(), and in timeval
+(seconds + microseconds) units, instead of seconds.
+
+@item OnExpire(event, int, int, double, int, double, int time_tp, time_tp, int)
+QueueRTCPManager::runControlService(microtimeout_t) (this method also
+implements part of SendRTCPReport(e))
+
+@item OnReceive(packet, event, int, int, int, double, double, double, double)
+void QueueRTCPManager::takeInControlPacket() and
+QueueRTCPManager::runControlService(microtimeout_t)
+
+@item Schedule(time, event) and Reschedule(time, event)
+No equivalent.
+
+@findex QueueRTCPManager::dispatchControlPacket
+@item SendRTCPReport(event)
+@code{dispatchControlPacket}.
+
+@findex QueueRTCPManager::dispatchBYE
+@item SendBYEPacket(event)
+@code{QueueRTCPManager::dispatchBYE(const std::string& reason)}.
+
+@item TypeOfEvent(event)
+No equivalent.
+
+@item PacketType(p)
+No equivalent.
+
+@findex IncomingDataQueue::takeInDataPacket
+@item ReceivedPacketSize()
+@code{size_t IncomingDataQueue::takeInDataPacket()}.
+
+@findex OutgoingDataQueue::dispatchDataPacket
+@findex QueueRTCPManager::dispatchControlPacket
+@item SentPacketSize()
+@code{size_t OutgoingDataQueue::dispatchDataPacket()} -data, and
+@code{size_t QueueRTCPManager::dispatchControlPacket()} -control.
+
+@item NewMember(p)
+
+@item NewSender(p)
+
+@item AddMember() and RemoveMember()
+
+@item AddSender() and RemoveSender()
+
+@end table
+
+
+@c -----------------------------------------------------------------------
+@node A.8
+@subsection A.8
+@cindex A.8
+
+@cindex jitter
+@cindex interarrival jitter
+@findex IncomingDataQueue::recordReception
+Interarrival jitter is estimated as specified in A.8, in
+@code{recordReception}. Jitter is kept as a float.
+
+
+@c -----------------------------------------------------------------------
+@node Related Work
+@comment node-name, next, previous, up
+@chapter Related Work
+@cindex Related work
+
+@emph{TODO}. Other free @acronym{RTP} stacks and tools:
+
+@itemize
+
+@item jrtplib
+
+@item oRTP
+
+@item LIVE.COM Streaming Media
+
+@item UCL Common Code Library. Note this library is distributed under a BSD license @emph{with} the obnoxious clausule.
+@end itemize
+
+
+@c -----------------------------------------------------------------------
+@node Future Work
+@comment node-name, next, previous, up
+@chapter Future Work
+@cindex Future, Future Work
+
+@emph{TODO}.
+
+
+@c %** end of body
+
+@c -----------------------------------------------------------------------
+@node Licenses
+@appendix Licenses
+
+@menu
+* GNU Free Documentation License:: License for this document.
+* GNU General Public License:: ccRTP Base License.
+* GNU ccRTP Linking Exception:: ccRTP linking exception.
+@end menu
+
+@include gpl.texi
+
+@include fdl.texi
+
+
+@c -----------------------------------------------------------------------
+@node GNU ccRTP Linking Exception
+@appendixsec GNU ccRTP Linking Exception
+@cindex GNU ccRTP Linking Exception
+
+As a special exception to the GNU General Public License, permission
+is granted for additional uses of the text contained in its release of
+ccRTP.
+
+The exception is that, if you link the ccRTP library with other files
+to produce an executable, this does not by itself cause the resulting
+executable to be covered by the GNU General Public License. Your use
+of that executable is in no way restricted on account of linking the
+ccRTP library code into it.
+
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+
+This exception applies only to the code released under the name ccRTP.
+If you copy code from other releases into a copy of ccRTP, as the
+General Public License permits, the exception does not apply to the
+code that you add in this way. To avoid misleading anyone as to the
+status of such modified files, you must delete this exception notice
+from them.
+
+If you write modifications of your own for ccRTP, it is your choice
+whether to permit this exception to apply to your modifications. If
+you do not wish that, delete this exception notice.
+
+
+
+
+@c -----------------------------------------------------------------------
+
+@c %** start of end
+@node Class and Data Type Index
+@unnumbered Class and Data Type Index
+
+@printindex tp
+
+@node Method and Function Index
+@unnumbered Method and Function Index
+
+@printindex fn
+
+@node Concept Index
+@unnumbered Concept Index
+
+@printindex cp
+
+@bye
+@c %** end of end
diff --git a/doc/fdl.texi b/doc/fdl.texi
new file mode 100644
index 0000000..5385f32
--- /dev/null
+++ b/doc/fdl.texi
@@ -0,0 +1,452 @@
+
+@node GNU Free Documentation License
+@appendixsec GNU Free Documentation License
+
+@cindex FDL, GNU Free Documentation License
+@center Version 1.2, November 2002
+
+@display
+Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warrany Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+@end enumerate
+
+@page
+@appendixsubsec ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with...Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
diff --git a/doc/fdlnotice.texi b/doc/fdlnotice.texi
new file mode 100644
index 0000000..d667a36
--- /dev/null
+++ b/doc/fdlnotice.texi
@@ -0,0 +1,6 @@
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+A copy of the license is included in the section entitled "GNU
+Free Documentation License".
diff --git a/doc/gpl.texi b/doc/gpl.texi
new file mode 100644
index 0000000..d26233c
--- /dev/null
+++ b/doc/gpl.texi
@@ -0,0 +1,392 @@
+@node GNU General Public License
+@appendixsec GNU GENERAL PUBLIC LICENSE
+@center Version 2, June 1991
+
+@c This file is intended to be included in another file.
+
+@display
+Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@appendixsubsec Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software---to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+@iftex
+@appendixsubsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end iftex
+@ifinfo
+@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end ifinfo
+
+@enumerate 0
+@item
+This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The ``Program'', below,
+refers to any such program or work, and a ``work based on the Program''
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term ``modification''.) Each licensee is addressed as ``you''.
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+@item
+You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+@item
+You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+@enumerate a
+@item
+You must cause the modified files to carry prominent notices
+stating that you changed the files and the date of any change.
+
+@item
+You must cause any work that you distribute or publish, that in
+whole or in part contains or is derived from the Program or any
+part thereof, to be licensed as a whole at no charge to all third
+parties under the terms of this License.
+
+@item
+If the modified program normally reads commands interactively
+when run, you must cause it, when started running for such
+interactive use in the most ordinary way, to print or display an
+announcement including an appropriate copyright notice and a
+notice that there is no warranty (or else, saying that you provide
+a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this
+License. (Exception: if the Program itself is interactive but
+does not normally print such an announcement, your work based on
+the Program is not required to print an announcement.)
+@end enumerate
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+@item
+You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+@enumerate a
+@item
+Accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of Sections
+1 and 2 above on a medium customarily used for software interchange; or,
+
+@item
+Accompany it with a written offer, valid for at least three
+years, to give any third party, for a charge no more than your
+cost of physically performing source distribution, a complete
+machine-readable copy of the corresponding source code, to be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+@item
+Accompany it with the information you received as to the offer
+to distribute corresponding source code. (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form with such
+an offer, in accord with Subsection b above.)
+@end enumerate
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+@item
+You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+@item
+You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+@item
+Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+@item
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+@item
+If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+@item
+The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and ``any
+later version'', you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+@item
+If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+@iftex
+@heading NO WARRANTY
+@end iftex
+@ifinfo
+@center NO WARRANTY
+@end ifinfo
+
+@item
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+@item
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+@end enumerate
+
+@iftex
+@heading END OF TERMS AND CONDITIONS
+@end iftex
+@ifinfo
+@center END OF TERMS AND CONDITIONS
+@end ifinfo
+
+@page
+@appendixsubsec Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the ``copyright'' line and a pointer to where the full notice is found.
+
+@smallexample
+@var{one line to give the program's name and a brief idea of what it does.}
+Copyright (C) @var{yyyy} @var{name of author}
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+@end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+@smallexample
+Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show c' for details.
+@end smallexample
+
+The hypothetical commands @samp{show w} and @samp{show c} should show
+the appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than @samp{show w} and
+@samp{show c}; they could even be mouse-clicks or menu items---whatever
+suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the program, if
+necessary. Here is a sample; alter the names:
+
+@example
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+`Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+@var{signature of Ty Coon}, 1 April 1989
+Ty Coon, President of Vice
+@end example
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/doc/srcmodel.dia b/doc/srcmodel.dia
new file mode 100644
index 0000000..7fa2210
--- /dev/null
+++ b/doc/srcmodel.dia
Binary files differ
diff --git a/doc/srcmodel.txt b/doc/srcmodel.txt
new file mode 100644
index 0000000..a3344d8
--- /dev/null
+++ b/doc/srcmodel.txt
@@ -0,0 +1,11 @@
+ ---------------
+ --------------------| Participant |--------------------
+ | 0:n --------------- 0:1 |
+ | 1 1:n |
+ ------------------ ----------------
+ | RTPApplication | | SyncSource |
+ ------------------ ----------------
+ | 1 0:n |
+ | --------------- |
+ --------------------| RTPSession |--------------------
+ 0:n --------------- 1