diff --git a/jni/ccrtp-1.8.0-android/doc/Doxyfile b/jni/ccrtp-1.8.0-android/doc/Doxyfile
new file mode 100644
index 0000000..9c93ea8
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/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/jni/ccrtp-1.8.0-android/doc/Doxymini b/jni/ccrtp-1.8.0-android/doc/Doxymini
new file mode 100644
index 0000000..f9337f4
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/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/jni/ccrtp-1.8.0-android/doc/Makefile b/jni/ccrtp-1.8.0-android/doc/Makefile
new file mode 100644
index 0000000..a12896f
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/doc/Makefile
@@ -0,0 +1,680 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# doc/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+
+
+# 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.
+
+
+pkgdatadir = $(datadir)/ccrtp
+pkgincludedir = $(includedir)/ccrtp
+pkglibdir = $(libdir)/ccrtp
+pkglibexecdir = $(libexecdir)/ccrtp
+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 = x86_64-unknown-linux-gnu
+host_triplet = arm-unknown-linux-androideabi
+target_triplet = arm-unknown-linux-androideabi
+subdir = doc
+DIST_COMMON = $(ccrtp_TEXINFOS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+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)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+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__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'
+DATA = $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/evigier/git/ccrtp-1.8.0-android/autoconf/missing --run aclocal-1.11
+AMTAR = ${SHELL} /home/evigier/git/ccrtp-1.8.0-android/autoconf/missing --run tar
+AR = arm-linux-androideabi-ar
+AUTOCONF = ${SHELL} /home/evigier/git/ccrtp-1.8.0-android/autoconf/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/evigier/git/ccrtp-1.8.0-android/autoconf/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/evigier/git/ccrtp-1.8.0-android/autoconf/missing --run automake-1.11
+AWK = gawk
+CC = arm-linux-androideabi-gcc
+CCDEPMODE = depmode=none
+CFLAGS = -g -O2
+COMMON_CFLAGS = -D_GNU_SOURCE  
+COMMON_LIBS = -pthread -lccgnu2 -ldl -lrt  
+CPP = arm-linux-androideabi-gcc -E
+CPPFLAGS = 
+CXX = arm-linux-androideabi-g++
+CXXCPP = arm-linux-androideabi-g++ -E
+CXXDEPMODE = depmode=none
+CXXFLAGS = -g -O2 -D_GNU_SOURCE  
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DOXYGEN = no
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+FTPDIR = 
+GNULIBS = -L/usr/lib -pthread -lccgnu2 -ldl -lrt   
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+KDOC_DIR = $(top_srcdir)/doc
+LD = /home/evigier/android-14b-toolchain/arm-linux-androideabi/bin/ld
+LDFLAGS = 
+LIBGCRYPT_CFLAGS = 
+LIBGCRYPT_CONFIG = 
+LIBGCRYPT_LIBS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIB_MAJOR = 0
+LIB_VERSION = 1_8
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_CCXX_VERSION = -version-info 0:0
+LT_MAJOR = 0
+LT_MINOR = 0
+LT_RELEASE = 1.8
+LT_SUBVER = 0.0
+MAINT = #
+MAKEINFO = ${SHELL} /home/evigier/git/ccrtp-1.8.0-android/autoconf/missing --run makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /home/evigier/android-14b-toolchain/bin/arm-linux-androideabi-nm -B
+NMEDIT = 
+OBJDUMP = arm-linux-androideabi-objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = ccrtp
+PACKAGE_BUGREPORT = 
+PACKAGE_NAME = 
+PACKAGE_STRING = 
+PACKAGE_TARNAME = 
+PACKAGE_URL = 
+PACKAGE_VERSION = 
+PATH_SEPARATOR = :
+PKG_CONFIG = /usr/bin/pkg-config
+PKG_CONFIG_LIBDIR = 
+PKG_CONFIG_PATH = /home/evigier/android-ndk-r8b/platforms/android-14/arch-arm/usr/lib/pkgconfig:/usr/local/lib/pkgconfig
+RANLIB = arm-linux-androideabi-ranlib
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+STRIP = arm-linux-androideabi-strip
+VERSION = 1.8.0
+WARN_FLAGS = -fno-strict-aliasing -Wall -ansi -pedantic
+abs_builddir = /home/evigier/git/ccrtp-1.8.0-android/doc
+abs_srcdir = /home/evigier/git/ccrtp-1.8.0-android/doc
+abs_top_builddir = /home/evigier/git/ccrtp-1.8.0-android
+abs_top_srcdir = /home/evigier/git/ccrtp-1.8.0-android
+ac_ct_AR = 
+ac_ct_CC = 
+ac_ct_CXX = 
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = ${AMTAR} chof - "$$tardir"
+am__untar = ${AMTAR} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-unknown-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = unknown
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = arm-unknown-linux-androideabi
+host_alias = arm-linux-androideabi
+host_cpu = arm
+host_os = linux-androideabi
+host_vendor = unknown
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/evigier/git/ccrtp-1.8.0-android/autoconf/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = /bin/mkdir -p
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /home/evigier/android-ndk-r8b/platforms/android-14/arch-arm/usr
+program_transform_name = s,x,x,
+psdir = ${docdir}
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target = arm-unknown-linux-androideabi
+target_alias = 
+target_cpu = arm
+target_os = linux-androideabi
+target_vendor = unknown
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+AUTOMAKE_OPTIONS = no-dependencies
+EXTRA_DIST = srcmodel.txt srcmodel.dia Doxyfile Doxymini
+info_TEXINFOS = ccrtp.texi
+ccrtp_TEXINFOS = gpl.texi fdl.texi fdlnotice.texi
+#noinst_DATA = doxy
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .dvi .html .info .pdf .ps .texi
+$(srcdir)/Makefile.in: # $(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: # $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): # $(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:
+	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:
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2DVI) $<
+
+.texi.pdf:
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2PDF) $<
+
+.texi.html:
+	rm -rf $(@:.html=.htp)
+	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $(@:.html=.htp) $<; \
+	then \
+	  rm -rf $@; \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+	else \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+	  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:
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	$(DVIPS) -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)' && \
+	    (install-info --version && \
+	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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.aux ccrtp.cp ccrtp.cps ccrtp.fn ccrtp.fns ccrtp.ky ccrtp.kys \
+	  ccrtp.log ccrtp.pg ccrtp.pgs ccrtp.tmp ccrtp.toc ccrtp.tp \
+	  ccrtp.tps ccrtp.vr ccrtp.vrs
+
+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
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+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:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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)
+	test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
+	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+	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)
+	test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+	@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  $(am__strip_dir) \
+	  if test -d "$$d$$p"; then \
+	    echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+	    $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+	  else \
+	    list2="$$list2 $$d$$p"; \
+	  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)
+	test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+	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 (install-info --version && \
+	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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)
+	test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
+	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+	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)
+	test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
+	@list='$(PSS)'; test -n "$(psdir)" || list=; \
+	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 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 \
+	uninstall uninstall-am uninstall-dvi-am uninstall-html-am \
+	uninstall-info-am uninstall-pdf-am uninstall-ps-am
+
+
+#doxy:   Doxyfile
+#	(cd . ; $(DOXYGEN) Doxymini)
+#	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/jni/ccrtp-1.8.0-android/doc/Makefile.am b/jni/ccrtp-1.8.0-android/doc/Makefile.am
new file mode 100644
index 0000000..aa9d618
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/doc/Makefile.am
@@ -0,0 +1,26 @@
+# 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
+
+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/jni/ccrtp-1.8.0-android/doc/Makefile.in b/jni/ccrtp-1.8.0-android/doc/Makefile.in
new file mode 100644
index 0000000..6841f08
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/doc/Makefile.in
@@ -0,0 +1,680 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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@
+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 = $(ccrtp_TEXINFOS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+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)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+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__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'
+DATA = $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMMON_CFLAGS = @COMMON_CFLAGS@
+COMMON_LIBS = @COMMON_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@
+LIB_MAJOR = @LIB_MAJOR@
+LIB_VERSION = @LIB_VERSION@
+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@
+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
+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:
+	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:
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2DVI) $<
+
+.texi.pdf:
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2PDF) $<
+
+.texi.html:
+	rm -rf $(@:.html=.htp)
+	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $(@:.html=.htp) $<; \
+	then \
+	  rm -rf $@; \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+	else \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+	  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:
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	$(DVIPS) -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)' && \
+	    (install-info --version && \
+	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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.aux ccrtp.cp ccrtp.cps ccrtp.fn ccrtp.fns ccrtp.ky ccrtp.kys \
+	  ccrtp.log ccrtp.pg ccrtp.pgs ccrtp.tmp ccrtp.toc ccrtp.tp \
+	  ccrtp.tps ccrtp.vr ccrtp.vrs
+
+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
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+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:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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)
+	test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
+	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+	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)
+	test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+	@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  $(am__strip_dir) \
+	  if test -d "$$d$$p"; then \
+	    echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+	    $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+	  else \
+	    list2="$$list2 $$d$$p"; \
+	  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)
+	test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+	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 (install-info --version && \
+	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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)
+	test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
+	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+	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)
+	test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
+	@list='$(PSS)'; test -n "$(psdir)" || list=; \
+	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 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 \
+	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/jni/ccrtp-1.8.0-android/doc/ccrtp.info b/jni/ccrtp-1.8.0-android/doc/ccrtp.info
new file mode 100644
index 0000000..59d9fa9
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/doc/ccrtp.info
Binary files differ
diff --git a/jni/ccrtp-1.8.0-android/doc/ccrtp.texi b/jni/ccrtp-1.8.0-android/doc/ccrtp.texi
new file mode 100644
index 0000000..b6f5099
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/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 overriden, 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/jni/ccrtp-1.8.0-android/doc/fdl.texi b/jni/ccrtp-1.8.0-android/doc/fdl.texi
new file mode 100644
index 0000000..5385f32
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/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/jni/ccrtp-1.8.0-android/doc/fdlnotice.texi b/jni/ccrtp-1.8.0-android/doc/fdlnotice.texi
new file mode 100644
index 0000000..d667a36
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/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/jni/ccrtp-1.8.0-android/doc/gpl.texi b/jni/ccrtp-1.8.0-android/doc/gpl.texi
new file mode 100644
index 0000000..d26233c
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/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/jni/ccrtp-1.8.0-android/doc/srcmodel.dia b/jni/ccrtp-1.8.0-android/doc/srcmodel.dia
new file mode 100644
index 0000000..7fa2210
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/doc/srcmodel.dia
Binary files differ
diff --git a/jni/ccrtp-1.8.0-android/doc/srcmodel.txt b/jni/ccrtp-1.8.0-android/doc/srcmodel.txt
new file mode 100644
index 0000000..a3344d8
--- /dev/null
+++ b/jni/ccrtp-1.8.0-android/doc/srcmodel.txt
@@ -0,0 +1,11 @@
+                          ---------------
+      --------------------| Participant |--------------------
+      |              0:n  ---------------  0:1              |
+      | 1                                              1:n  |
+ ------------------                                  ----------------
+ | RTPApplication |                                  |  SyncSource  |
+ ------------------                                  ----------------
+      | 1                                              0:n  |
+      |                   ---------------                   |
+      --------------------|  RTPSession |--------------------
+                     0:n  ---------------  1
